spring+mybatis 手动开启和提交事务 http://www.cnblogs.com/xujishou/p/6210012.html
spring配置文件
1 2 3 4 5 6 7 |
<!-- (事务管理)transaction manager, use JtaTransactionManager for global tx --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 使用annotation定义事务 --> <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" /> |
示例java代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-zhendoc.xml"); ...... public TransactionStatus beginTransaction(DataSourceTransactionManager transactionManager){ //2.获取事务定义 DefaultTransactionDefinition defTransaction = new DefaultTransactionDefinition(); //3.设置事务隔离级别,开启新事务 defTransaction.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); //4.获得事务状态 TransactionStatus transactionStatus = transactionManager.getTransaction(defTransaction); return transactionStatus; } //@Transactional(rollbackFor = RuntimeException.class, propagation = Propagation.REQUIRED) public void doImport(ApplicationContext context) { //1.获取事务控制管理器 DataSourceTransactionManager transactionManager = context.getBean( "transactionManager", DataSourceTransactionManager.class); TransactionStatus transactionStatus= beginTransaction( transactionManager); int count = 1; ...... for (Map<String, String> row : list) { ...... if(count%5==0){ transactionManager.commit(transactionStatus); //transactionManager.rollback(transactionStatus); transactionStatus= beginTransaction( transactionManager);//重新生成新事务 } count++; } if (true) throw new RuntimeException("测试回滚"); } |