Java Spring-Mybatis-Mysql事务不工作



我们的新项目使用Spring boot/MySQL/mybatis组合。mybatis spring用于交易管理。

我们使用的MySQL引擎是innoDB。我们是第一次将MySQL数据库用于微服务。

我们面临的问题是,即使spring Transaction跟踪日志显示事务在DB上回滚,但它们并没有回滚。日志

TRACE TransactionInterceptor:545-在异常之后完成[service.EntityActionServiceImplementation.updateApplicationStatus]的事务:business.exception.BusinessException:/by-zero2018-11-14 16:22:32 TRACE RuleBasedTransaction属性:134-应用规则确定事务是否应在business.exception.BusinessException上回滚:/by-zero2018-11-14 16:22:32 TRACE RuleBasedTransactionAttribute:151-获胜回滚规则为:RollbackRuleAttribute,模式为[business.exception.BusinessException]2018-11-14 16:22:32 TRACE TransactionSynchronizationManager:248-删除值[org.mybatis.spring.SqlSessionHolder@6a1568d6]对于密钥[org.apache.ibatis.session.defaults.DefaultSqlSessionFactory@3db65c0d]来自线程[min]2018-11-14 16:22:32 TRACE TransactionSynchronizationManager:142-检索到的值[org.springframework.jdbc.datasource.ConnectionHolder@73bb573d]对于密钥[org.apache.commons.dbcp.BasicDataSource@76cdafa3]绑定到线程〔main〕2018-11-14 16:22:32 TRACE TransactionSynchronizationManager:248-删除值[org.springframework.jdbc.datasource.ConnectionHolder@73bb573d]对于密钥[org.apache.commons.dbcp.BasicDataSource@76cdafa3]来自线程[min]2018-11-14 16:22:32调试DataSourceUtils:340-返回JDBC连接到DataSource2018-11-14 16:22:32调试DataSourceTransactionManager:836-启动事务回滚2018-11-14 16:22:32调试DataSourceTransactionManager:341-在Connection上回滚JDBC事务[HikariProxyConnection@16957838包裹oracle.jdbc.driver.T4CConnection@11c78080]2018-11-14 16:22:32跟踪事务同步管理器: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。

Schema和表引擎是InnoDB。

我们是否缺少任何mysql特定设置?

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

最新更新