Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql上的MyBatis Spring事务,不回滚_Mysql_Spring_Mybatis - Fatal编程技术网

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