Spring 手动提交事务

在使用Spring声明式事务时,不需要手动的开启事务和关闭事务,但是对于一些场景则需要开发人员手动的提交事务,比如说一个操作中需要处理大量的数据库更改,可以将大量的数据库更改分批的提交,又比如一次事务中一类的操作的失败并不需要对其他类操作进行事务回滚,就可以将此类的事务先进行提交,这样就需要手动的获取Spring管理的Transaction来提交事务。

1、applicationContext.xml配置

复制代码
 1 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
 2     <property name="dataSource" ref="dataSource" />
 3 bean>
 4 
 5 <tx:advice id="txAdvice" transaction-manager="transactionManager">
 6     <tx:attributes>
 7         <tx:method name="*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
 8         <tx:method name="find*" read-only="true" propagation="SUPPORTS" />
 9         <tx:method name="get*" read-only="true" propagation="SUPPORTS" />
10         <tx:method name="select*" read-only="true" propagation="SUPPORTS" />
11         <tx:method name="list*" read-only="true" propagation="SUPPORTS" />
12         <tx:method name="load*" read-only="true" propagation="SUPPORTS" />
13     tx:attributes>
14 tx:advice>
15 
16 <aop:config>
17     <aop:pointcut id="servicePointCut" expression="execution(* com.xxx.xxx.service..*(..))" />
18     <aop:advisor advice-ref="txAdvice" pointcut-ref="servicePointCut" />
19 aop:config>
复制代码

2、手动提交事务

复制代码
 1 @Resource(name="transactionManager")  2 private DataSourceTransactionManager transactionManager;  3 
 4 DefaultTransactionDefinition transDefinition = new DefaultTransactionDefinition();  5 //开启新事物
 6 transDefinition.setPropagationBehavior(DefaultTransactionDefinition.PROPAGATION_REQUIRES_NEW);  7 TransactionStatus transStatus = transactionManager.getTransaction(transDefinition);  8 try {  9     //TODO
10  transactionManager.commit(transStatus); 11 } catch (Exception e) { 12  transactionManager.rollback(transStatus); 13 }
复制代码

你可能感兴趣的:(Java设计模式等思想,后端Java框架)