ssm框架中的spring事务回滚问题

nkcskrwz  于 2021-07-26  发布在  Java
关注(0)|答案(0)|浏览(289)

软件版本:jdk 8 spring 4.0 mybatis-3.2.7.jar mybatis-spring-1.2.2.jar ojdbc6.jar oracle 11g applicationcontext.xml:

  1. <context:property-placeholder location="classpath:jdbc.properties" />
  2. <bean class="org.springframework.jdbc.datasource.DriverManagerDataSource"
  3. id="dataSource">
  4. <property name="url" value="${jdbc.url}"></property>
  5. <property name="driverClassName" value="${jdbc.driverClassName}"></property>
  6. <property name="username" value="${jdbc.username}"></property>
  7. <property name="password" value="${jdbc.password}"></property>
  8. </bean>
  9. <bean id="appTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  10. <property name="dataSource" ref="dataSource" />
  11. </bean>
  12. <tx:annotation-driven transaction-manager="appTransactionManager" />

junit代码:

  1. @RunWith(SpringJUnit4ClassRunner.class)
  2. @TransactionConfiguration(transactionManager = "appTransactionManager", defaultRollback = true)
  3. @Transactional(rollbackFor = Exception.class)
  4. @ContextConfiguration("classpath:applicationContext.xml")
  5. public class GenerateJylshTest {
  6. @Test
  7. @Rollback(true)
  8. public void generateJylshTest() {
  9. String jyjgbh = "4201000000";
  10. GenerateJylsh generator = new GenerateJylsh();
  11. int i;
  12. for(i = 0;i < 3;i++) {
  13. String jylshString = generator.generateJylsh(jyjgbh);
  14. System.out.println(jylshString);
  15. }
  16. int k = 1/0;
  17. }
  18. }

控制台结果:

  1. Creating a new SqlSession
  2. Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@c7ba306]
  3. JDBC Connection [oracle.jdbc.driver.T4CConnection@172b013] will be managed by Spring
  4. ==> Preparing: SELECT * FROM BIZ_VEH_IS_TEMP_FLOWNUM t WHERE t.JCZ = ? AND t.JCXDM = ?
  5. ==> Parameters: 4201000000(String), 42010000001(String)
  6. <== Columns: JCZ, JCXDM, LSH
  7. <== Row: 4201000000, 42010000001, 01000019110800027
  8. <== Total: 1
  9. Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@c7ba306]
  10. Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@c7ba306] from current transaction
  11. ==> Preparing: UPDATE BIZ_VEH_IS_TEMP_FLOWNUM SET LSH = ? WHERE JCZ = ? AND JCXDM = ?
  12. ==> Parameters: 01000019110800028(String), 4201000000(String), 42010000001(String)
  13. <== Updates: 1
  14. Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@c7ba306]
  15. 01000019110800028
  16. Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@c7ba306] from current transaction
  17. ==> Preparing: SELECT * FROM BIZ_VEH_IS_TEMP_FLOWNUM t WHERE t.JCZ = ? AND t.JCXDM = ?
  18. ==> Parameters: 4201000000(String), 42010000001(String)
  19. <== Columns: JCZ, JCXDM, LSH
  20. <== Row: 4201000000, 42010000001, 01000019110800028
  21. <== Total: 1
  22. Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@c7ba306]
  23. Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@c7ba306] from current transaction
  24. ==> Preparing: UPDATE BIZ_VEH_IS_TEMP_FLOWNUM SET LSH = ? WHERE JCZ = ? AND JCXDM = ?
  25. ==> Parameters: 01000019110800029(String), 4201000000(String), 42010000001(String)
  26. <== Updates: 1
  27. Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@c7ba306]
  28. 01000019110800029
  29. Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@c7ba306] from current transaction
  30. ==> Preparing: SELECT * FROM BIZ_VEH_IS_TEMP_FLOWNUM t WHERE t.JCZ = ? AND t.JCXDM = ?
  31. ==> Parameters: 4201000000(String), 42010000001(String)
  32. <== Columns: JCZ, JCXDM, LSH
  33. <== Row: 4201000000, 42010000001, 01000019110800029
  34. <== Total: 1
  35. Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@c7ba306]
  36. Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@c7ba306] from current transaction
  37. ==> Preparing: UPDATE BIZ_VEH_IS_TEMP_FLOWNUM SET LSH = ? WHERE JCZ = ? AND JCXDM = ?
  38. ==> Parameters: 01000019110800030(String), 4201000000(String), 42010000001(String)
  39. <== Updates: 1
  40. Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@c7ba306]
  41. 01000019110800030
  42. Transaction synchronization rolling back SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@c7ba306]
  43. Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@c7ba306]
  44. 2019-11-08 16:31:09 [main] - [ INFO ] Rolled back transaction after test execution for test context [DefaultTestContext@f316aeb testClass = GenerateJylshTest, testInstance = test.GenerateJylshTest@6aa3a905, testMethod = generateJylshTest@GenerateJylshTest, testException = java.lang.RuntimeException, mergedContextConfiguration = [MergedContextConfiguration@a22cb6a testClass = GenerateJylshTest, locations = '{classpath:applicationContext.xml}', classes = '{}', contextInitializerClasses = '[]', activeProfiles = '{}', contextLoader = 'org.springframework.test.context.support.DelegatingSmartContextLoader', parent = [null]]]
  45. 2019-11-08 16:31:09 [Thread-1] - [ INFO ] Closing org.springframework.context.support.GenericApplicationContext@4667ae56: startup date [Fri Nov 08 16:31:05 CST 2019]; root of context hierarchy

我以前认为这个结果代码

  1. Transaction synchronization rolling back SqlSession
  2. Transaction synchronization closing SqlSession

意味着事务回滚已经完成,但事实是数据仍然更新到oracle数据库。所以,我想知道为什么。谢谢你的帮助。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题