- mysql/
- Mysql上的MyBatis Spring事务,不回滚
Mysql上的MyBatis Spring事务,不回滚
Mysql上的MyBatis Spring事务,不回滚,mysql,spring,mybatis,Mysql,Spring,Mybatis,在这里,我会尽量简明扼要。我经历了许多类似的问题,在网上报道,并评估了我的问题,对这些。然而,这并没有解决我的问题。所以我终于把这个贴出来了
我有一个带spring注释的事务性服务(在实现的类方法上注释),带有默认值。该服务通过直接调用mybatis映射器方法(在服务中自动连接)执行一些插入(在循环中)和无参数存储过程调用
我发现事务没有在异常(如Spring所预期的运行时异常)时回滚。我通过注释存储的proc调用进行测试,插入时不使用循环,但这没有帮助
查看日志,我可以发现,尽管事务同步在回滚
在这里,我会尽量简明扼要。我经历了许多类似的问题,在网上报道,并评估了我的问题,对这些。然而,这并没有解决我的问题。所以我终于把这个贴出来了
我有一个带spring注释的事务性服务(在实现的类方法上注释),带有默认值。该服务通过直接调用mybatis映射器方法(在服务中自动连接)执行一些插入(在循环中)和无参数存储过程调用
我发现事务没有在异常(如Spring所预期的运行时异常)时回滚。我通过注释存储的proc调用进行测试,插入时不使用循环,但这没有帮助
查看日志,我可以发现,尽管事务同步在回滚时按预期进行,但Spring正在切换到手动提交。我不确定这是否是造成问题的原因
我在Tomcat和Driver manager连接单元测试中使用JNDI连接进行了测试,两者的行为相同。以下是日志摘录:
- 春季3.1.1
- mybatis 3.2.1
- mybatis spring 1.2.2
- mysql连接器5.1.30
- Mysql数据库5.5.24
======================================
使用DriverManager数据源测试
======================================
2014-10-17 12:34:17[main]调试数据源TransactionManager-创建名为[com.ericsson.prf.web.service.impl.ReportingService.saveHeadcountCorrectionsJSON]的新事务:需要传播,隔离默认
2014-10-17 12:34:17[main]调试DriverManager数据源-创建与[JDBC:mysql://localhost:3306/PRFDB]
2014-10-17 12:34:17[main]调试数据源TransactionManager-获取的连接[com.mysql.jdbc。JDBC4Connection@728cacdc]对于JDBC事务
2014-10-17 12:34:17[main]调试数据源TransactionManager-切换JDBC连接[com.mysql.JDBC。JDBC4Connection@728cacdc]手动提交
2014-10-17 12:34:17[main]调试SqlSessionUtils-创建新的SqlSession
2014-10-17 12:34:17[main]调试SqlSessionUtils-为SqlSession[org.apache.ibatis.session.defaults]注册事务同步。DefaultSqlSession@114d4c11]
2014-10-17 12:34:17[main]调试SpringManagedTransaction-JDBC连接[com.mysql.JDBC。JDBC4Connection@728cacdc]将由Spring管理
2014-10-17 12:34:17[main]调试updateHeadcountPlanned-ooo使用连接[com.mysql.jdbc。JDBC4Connection@728cacdc]
2014-10-17 12:34:17[main]调试updateHeadcountPlanned-=>准备:更新PRF\U编制\U计划集合计数=?其中ID=?
2014-10-17 12:34:17[主]调试更新HeadCountPlanned-=>参数:43(整数),1629(长)
2014-10-17 12:34:17[main]调试SqlSessionUtils-发布事务性SqlSession[org.apache.ibatis.session.defaults]。DefaultSqlSession@114d4c11]
2014-10-17 12:34:17[main]调试SqlSessionUtils-获取的SqlSession[org.apache.ibatis.session.defaults]。DefaultSqlSession@114d4c11]来自当前交易
2014-10-17 12:34:17[main]调试callloadhcostplanted-ooo使用连接[com.mysql.jdbc]。JDBC4Connection@728cacdc]
2014-10-17 12:34:17[main]调试callloadhcostplanted-=>准备:{call load\u sap\u hc\u cost\u planned()}
2014-10-17 12:34:17[main]调试SqlSessionUtils-发布事务性SqlSession[org.apache.ibatis.session.defaults]。DefaultSqlSession@114d4c11]
2014-10-17 12:34:18[main]调试SqlSessionUtils-事务同步取消注册SqlSession[org.apache.ibatis.session.defaults]。DefaultSqlSession@114d4c11]
2014-10-17 12:34:18[main]调试SqlSessionUtils-事务同步关闭SqlSession[org.apache.ibatis.session.defaults。DefaultSqlSession@114d4c11]
2014-10-17 12:34:18[主要]调试数据源TransactionManager-启动事务回滚
2014-10-17 12:34:18[main]调试数据源TransactionManager-在连接[com.mysql.JDBC]上回滚JDBC事务。JDBC4Connection@728cacdc]
2014-10-17 12:34:18[main]调试数据源TransactionManager-发布JDBC连接[com.mysql.JDBC。JDBC4Connection@728cacdc]交易后
2014-10-17 12:34:18[main]调试数据源utils-将JDBC连接返回到数据源
======================================
在Tomcat上使用JndiObjectFactoryBean
======================================
2014-10-17 12:53:51[http-bio-8080-exec-3]调试注释TransactionAttributeSource-添加具有以下属性的事务方法“saveHeadcountCorrectionsJSON”:需要传播,隔离默认;“”
2014-10-17 12:53:51[http-bio-8080-exec-3]调试DefaultListableBeanFactory-返回singleton bean“transactionManager”的缓存实例
2014-10-17 12:53:51[http-bio-8080-exec-3]调试数据源事务管理器-创建名为[com.ericsson.prf.web.service.impl.ReportingService.saveHeadcountCorrectionsJSON]的新事务:需要传播,默认隔离
2014-10-17 12:53:51[http-bio-8080-exec-3]调试数据源TransactionManager-获取的连接[jdbc:mysql://localhost:3306/PRFDB?autoReconnect=true&useUnicode=true&characterEncoding=UTF8,用户名=prf@localhost,用于JDBC事务的MySQL连接器Java]
2014-10-17 12:53:51[http-bio-8080-exec-3]调试数据源TransactionManager-切换JDBC连接[JDBC:mysql://localhost:3306/PRFDB?autoReconnect=true&useUnicode=true&characterEncoding=UTF8,用户名=prf@localhost,MySQL连接器Java]手动提交
2014-10-17 12:53:51[http-bio-8080-exec-3]调试SqlSessionUtils-创建新的SqlSession
2014-10-17 12:53:51[http-bio-8080-exec-3]调试SqlSessionUtils-为SqlSession注册事务同步[org.apache.ibatis.session.defaults]。DefaultSqlSession@46ee04fb]
2014-10-17 12:53:51[http-bio-8080-exec-3]调试SpringManagedTransaction-JDBC连接[JDBC:mysql://localhost:3306/PRFDB?autoReconnect=true&useUnicode=true&characterEncoding=UTF8,
======================================
Using DriverManagerDataSource testing
======================================
2014-10-17 12:34:17 [main] DEBUG DataSourceTransactionManager - Creating new transaction with name [com.ericsson.prf.web.service.impl.ReportingService.saveHeadcountCorrectionsJSON]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; ''
2014-10-17 12:34:17 [main] DEBUG DriverManagerDataSource - Creating new JDBC DriverManager Connection to [jdbc:mysql://localhost:3306/PRFDB]
2014-10-17 12:34:17 [main] DEBUG DataSourceTransactionManager - Acquired Connection [com.mysql.jdbc.JDBC4Connection@728cacdc] for JDBC transaction
2014-10-17 12:34:17 [main] DEBUG DataSourceTransactionManager - Switching JDBC Connection [com.mysql.jdbc.JDBC4Connection@728cacdc] to manual commit
2014-10-17 12:34:17 [main] DEBUG SqlSessionUtils - Creating a new SqlSession
2014-10-17 12:34:17 [main] DEBUG SqlSessionUtils - Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@114d4c11]
2014-10-17 12:34:17 [main] DEBUG SpringManagedTransaction - JDBC Connection [com.mysql.jdbc.JDBC4Connection@728cacdc] will be managed by Spring
2014-10-17 12:34:17 [main] DEBUG updateHeadcountPlanned - ooo Using Connection [com.mysql.jdbc.JDBC4Connection@728cacdc]
2014-10-17 12:34:17 [main] DEBUG updateHeadcountPlanned - ==> Preparing: UPDATE PRF_HEADCOUNT_PLANNED SET COUNT=? WHERE ID=?
2014-10-17 12:34:17 [main] DEBUG updateHeadcountPlanned - ==> Parameters: 43(Integer), 1629(Long)
2014-10-17 12:34:17 [main] DEBUG SqlSessionUtils - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@114d4c11]
2014-10-17 12:34:17 [main] DEBUG SqlSessionUtils - Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@114d4c11] from current transaction
2014-10-17 12:34:17 [main] DEBUG callLoadHCCostPlanned - ooo Using Connection [com.mysql.jdbc.JDBC4Connection@728cacdc]
2014-10-17 12:34:17 [main] DEBUG callLoadHCCostPlanned - ==> Preparing: {call load_sap_hc_cost_planned()}
2014-10-17 12:34:17 [main] DEBUG SqlSessionUtils - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@114d4c11]
2014-10-17 12:34:18 [main] DEBUG SqlSessionUtils - Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@114d4c11]
2014-10-17 12:34:18 [main] DEBUG SqlSessionUtils - Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@114d4c11]
2014-10-17 12:34:18 [main] DEBUG DataSourceTransactionManager - Initiating transaction rollback
2014-10-17 12:34:18 [main] DEBUG DataSourceTransactionManager - Rolling back JDBC transaction on Connection [com.mysql.jdbc.JDBC4Connection@728cacdc]
2014-10-17 12:34:18 [main] DEBUG DataSourceTransactionManager - Releasing JDBC Connection [com.mysql.jdbc.JDBC4Connection@728cacdc] after transaction
2014-10-17 12:34:18 [main] DEBUG DataSourceUtils - Returning JDBC Connection to DataSource
======================================
Using JndiObjectFactoryBean on Tomcat
======================================
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG AnnotationTransactionAttributeSource - Adding transactional method 'saveHeadcountCorrectionsJSON' with attribute: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; ''
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG DefaultListableBeanFactory - Returning cached instance of singleton bean 'transactionManager'
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG DataSourceTransactionManager - Creating new transaction with name [com.ericsson.prf.web.service.impl.ReportingService.saveHeadcountCorrectionsJSON]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; ''
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG DataSourceTransactionManager - Acquired Connection [jdbc:mysql://localhost:3306/PRFDB?autoReconnect=true&useUnicode=true&characterEncoding=UTF8, UserName=prf@localhost, MySQL Connector Java] for JDBC transaction
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG DataSourceTransactionManager - Switching JDBC Connection [jdbc:mysql://localhost:3306/PRFDB?autoReconnect=true&useUnicode=true&characterEncoding=UTF8, UserName=prf@localhost, MySQL Connector Java] to manual commit
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG SqlSessionUtils - Creating a new SqlSession
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG SqlSessionUtils - Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@46ee04fb]
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG SpringManagedTransaction - JDBC Connection [jdbc:mysql://localhost:3306/PRFDB?autoReconnect=true&useUnicode=true&characterEncoding=UTF8, UserName=prf@localhost, MySQL Connector Java] will be managed by Spring
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG updateHeadcountPlanned - ooo Using Connection [jdbc:mysql://localhost:3306/PRFDB?autoReconnect=true&useUnicode=true&characterEncoding=UTF8, UserName=prf@localhost, MySQL Connector Java]
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG updateHeadcountPlanned - ==> Preparing: UPDATE PRF_HEADCOUNT_PLANNED SET COUNT=? WHERE ID=?
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG updateHeadcountPlanned - ==> Parameters: 43(Integer), 1629(Long)
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG SqlSessionUtils - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@46ee04fb]
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG SqlSessionUtils - Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@46ee04fb] from current transaction
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG callLoadHCCostPlanned - ooo Using Connection [jdbc:mysql://localhost:3306/PRFDB?autoReconnect=true&useUnicode=true&characterEncoding=UTF8, UserName=prf@localhost, MySQL Connector Java]
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG callLoadHCCostPlanned - ==> Preparing: {call load_sap_hc_cost_planned()}
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG SqlSessionUtils - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@46ee04fb]
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG SqlSessionUtils - Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@46ee04fb]
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG SqlSessionUtils - Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@46ee04fb]
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG DataSourceTransactionManager - Initiating transaction rollback
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG DataSourceTransactionManager - Rolling back JDBC transaction on Connection [jdbc:mysql://localhost:3306/PRFDB?autoReconnect=true&useUnicode=true&characterEncoding=UTF8, UserName=prf@localhost, MySQL Connector Java]
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG DataSourceTransactionManager - Releasing JDBC Connection [jdbc:mysql://localhost:3306/PRFDB?autoReconnect=true&useUnicode=true&characterEncoding=UTF8, UserName=prf@localhost, MySQL Connector Java] after transaction
2014-10-17 12:53:51 [http-bio-8080-exec-3] DEBUG DataSourceUtils - Returning JDBC Connection to DataSource