我们在新项目中使用了Spring boot / MySQL / mybatis组合。 mybatis-spring用于交易管理。
我们正在使用的MySQL引擎是innoDB。我们是第一次将MySQL数据库用于微服务。
我们面临的问题是,即使春季的事务跟踪日志指出事务已在数据库上进行,事务也不会回滚。 日志
TRACE TransactionInterceptor:545-异常后完成[service.EntityActionServiceImplementation.updateApplicationStatus]的事务:business.exception.BusinessException:/减零 2018-11-14 16:22:32 TRACE RuleBasedTransactionAttribute:134-应用规则确定事务是否应在business.exception.BusinessException上回滚:/减零 2018-11-14 16:22:32 TRACE RuleBasedTransactionAttribute:151-获奖的回滚规则是:模式为[business.exception.BusinessException]的RollbackRuleAttribute 2018-11-14 16:22:32 TRACE TransactionSynchronizationManager:248-从线程[main]中删除了密钥[org.apache.ibatis.session.defaults.DefaultSqlSessionFactory@3db65c0d]的值[org.mybatis.spring.SqlSessionHolder@6a1568d6] 2018-11-14 16:22:32 TRACE TransactionSynchronizationManager:142-绑定到线程[main]的键[org.apache.commons.dbcp.BasicDataSource@76cdafa3]的检索值[org.springframework.jdbc.datasource.ConnectionHolder@73bb573d] ] 2018-11-14 16:22:32 TRACE TransactionSynchronizationManager:248-从线程[main]中删除了密钥[org.apache.commons.dbcp.BasicDataSource@76cdafa3]的值[org.springframework.jdbc.datasource.ConnectionHolder@73bb573d] 2018-11-14 16:22:32 DEBUG DataSourceUtils:340-将JDBC连接返回到DataSource 2018-11-14 16:22:32 DEBUG DataSourceTransactionManager:836-启动事务回滚 2018-11-14 16:22:32 DEBUG DataSourceTransactionManager:341-在连接[HikariProxyConnection @ 16957838包装oracle.jdbc.driver.T4CConnection@11c78080]上回滚JDBC事务 2018-11-14 16:22:32 TRACE TransactionSynchronizationManager:336-清除事务同步
代码块
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = BusinessException.class)
public boolean updateApplicationStatus(){
try{
}catch(Exception ex){
throw new BusinessException(ex.getMessage(), ex.getCause());
}
}
如果我为数据源设置了自动提交错误,则行为会改变。在这种情况下,事务根本没有提交。
BusinessException扩展了RunTimeException。
模式和表引擎是InnoDB。
我们是否缺少任何mysql特定设置?
答案 0 :(得分:0)
我正在为多个数据库使用多个事务管理器。在注释中添加了事务管理器标识符,从而解决了该问题。