我们在新项目中使用springboot/mysql/mybatis组合。mybatis spring用于事务管理。
我们使用的mysql引擎是innodb。我们是第一次将mysql数据库用于微服务。
我们面临的问题是,事务没有在db上回滚,即使spring事务跟踪日志说它们正在回滚。日志
跟踪事务terceptor:545 - 在异常:business.exception.businessexception:/by zero 2018-11-14 16:22:32 trace rulebasedtransaction之后为[service.entityactionserviceimplementation.updateapplicationstatus]完成事务attribute:134 - 应用规则来确定事务是否应该回滚business.exception.businessexception:/by zero 2018-11-14 16:22:32跟踪基于规则的事务attribute:151 - 获胜回滚规则是:rollbackruleattribute with pattern[business.exception.businessexception]2018-11-14 16:22:32 trace transactionsynchronizationmanager:248 - 删除值[org.mybatis.spring。sqlsessionholder@6a1568d6]对于键[org.apache.ibatis.session.defaults。defaultsqlsessionfactory@3db65c0d]来自线程[main]2018-11-14 16:22:32跟踪事务同步onmanager:142 - 检索值[org.springframework.jdbc.datasource。connectionholder@73bb573d]对于key[org.apache.commons.dbcp。basicdatasource@76cdafa3]绑定到线程[main]2018-11-14 16:22:32跟踪事务同步onmanager:248 - 删除了值[org.springframework.jdbc.datasource。connectionholder@73bb573d]对于key[org.apache.commons.dbcp。basicdatasource@76cdafa3]来自线程[main]2018-11-14 16:22:32调试数据urceutils:340 - 返回jdbc连接到数据源2018-11-14 16:22:32调试数据源事务onmanager:836 - 启动事务回滚2018-11-14 16:22:32调试数据源事务onmanager:341 - 在连接上回滚jdbc事务[hikariproxyconnection@16957838 Package oracle.jdbc.driver。t4cconnection@11c78080]2018-11-14 16:22:32跟踪事务同步onmanager:336 - 清算事务同步
代码块
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = BusinessException.class)
public boolean updateApplicationStatus(){
try{
}catch(Exception ex){
throw new BusinessException(ex.getMessage(), ex.getCause());
}
}
如果我为数据源设置auto commit false,行为就会改变。在这种情况下,事务根本没有提交。
businessexception扩展了runtimeexception。
模式和表引擎是innodb。
我们是否缺少任何特定于mysql的设置?
1条答案
按热度按时间zte4gxcn1#
我对多个数据库使用了多个事务管理器。在注解中添加事务管理器标识符解决了问题。