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

            //状态刷新

          transactionStatus.flush();
10     transactionManager.commit(transStatus);
11 } catch (Exception e) {

          //异常回滚               
12     transactionManager.rollback(transStatus);
13 }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值