Java Spring-Mybatis-Mysql事务不起作用

时间:2018-11-14 11:54:29

标签: java mysql spring-boot mybatis spring-transactions

我们在新项目中使用了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特定设置?

1 个答案:

答案 0 :(得分:0)

我正在为多个数据库使用多个事务管理器。在注释中添加了事务管理器标识符,从而解决了该问题。