• 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 }
  • 相关阅读:
    docker 安装 kafka
    【LeetCode】406根据身高重建队列 A
    SketchUp自动化——在Ruby中创建3D模型>>机器翻译笔记
    阅读真经5解析小程序
    MySQL中的where和having的区别
    日志中常见的异常(Exeption)
    软件测试&接口测试基本流程
    Charles使用教程(macOS)—附加安装包以及注册码
    导读
    帝国CMS灵动标签循环调用多个栏目下文章
  • 原文地址:https://www.cnblogs.com/banning/p/6346669.html
Copyright © 2020-2023  润新知