转载自 https://blog.csdn.net/qq724581322/article/details/51427100

例:  
   类似这样的方法不会回滚 (一个方法出错,另一个方法不会回滚) :

[html] view plaincopy
  1. if(userSave){
  2. try {
  3. userDao.save(user);
  4. userCapabilityQuotaDao.save(capabilityQuota);
  5. } catch (Exception e) {
  6. logger.info("能力开通接口,开户异常,异常信息:"+e);
  7. }
  8. }

下面的方法回滚(一个方法出错,另一个方法会回滚):

[html] view plaincopy
  1. if(userSave){
  2. try {
  3. userDao.save(user);
  4. userCapabilityQuotaDao.save(capabilityQuota);
  5. } catch (Exception e) {
  6. logger.info("能力开通接口,开户异常,异常信息:"+e);
  7. throw new RuntimeException();
  8. }
  9. }

或者:

[html] view plaincopy
  1. if(userSave){
  2. try {
  3. userDao.save(user);
  4. userCapabilityQuotaDao.save(capabilityQuota);
  5. } catch (Exception e) {
  6. logger.info("能力开通接口,开户异常,异常信息:"+e);
  7. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  8. }
  9. }

为什么不会滚呢??是对spring的事务机制就不明白。!!

默认Spring 事务只在发生未被捕获的 RuntimeExcetpion时才回滚。  
Spring Aop  异常捕获原理:被拦截的方法需显式抛出异常,并不能经任何处理,这样Aop代理才能捕获到方法的异常,才能进行回滚,默认情况下Aop只捕获RuntimeExcetpion的异常,但可以通过 配置来捕获特定的异常并回滚换句话说在service的方法中不使用try catch 或者在catch中最后加上throw new RuntimeExcetpion(),这样程序异常时才能被Aop捕获进而回滚

解决方案: 
  方案1.例如service层处理事务,那么service中的方法中不做异常捕获,或者在catch语句中最后增加throw new RuntimeExcetpion()语句,以便让Aop捕获异常再去回滚,并且在service上层(webservice客户端,view层action)要继续捕获这个异常并处理
  方案2.在service层方法的catch语句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();语句,手动回滚,这样上层就无需去处理异常(现在项目的做法)。

原文链接:http://blog.csdn.net/yipanbo/article/details/46048413

Spring手动回滚事务相关推荐

  1. spring手动回滚事务_Spring总结---gt;03

    什么是事务 逻辑上的一组操作,组成这组操作的各个单元,要么全都成功,要么全都失败. 事务的特性 原子性:事务不可分割一致性:事务执行前后数据完整性保持一致隔离性:一个事务的执行不应该受到其他事务的干扰 ...

  2. spring手动配置

    本文总结自:https://www.cnblogs.com/V1haoge/p/7183408.html SpringBoot中免除了大部分配置,但是对于一些特定的情况,还是需要我们进行手动配置的. ...

  3. 【SpringBoot】Spring手动装配和SpringBoot自动装配

    文章目录 1. Warm up 1.1 setter注入 1.2 构造器注入 1.3 属性注入 2. Warm up again 2.1 基于XML的配置 2.2 基于JavaConfig类的配置 3 ...

  4. spring——手动往spring容器中添加对象

        有时候,我们希望可以手动动态的往spring容器中添加对象,而不是必须要项目启动时就决定容器中有哪些对象,对于这种情况,spring提供了一种方式,DefaultListableBeanFac ...

  5. Spring 手动注册bean

    一般情况下,我们Spring应用中的bean都是通过注解或者xml注入到容器中的,有些情况下我们可能想手动往容器中注入bean,即编程方式注入bean. 本文所使用源码包版本:spring-beans ...

  6. spring手动代码控制事务

    为什么80%的码农都做不了架构师?>>>    DataSourceTransactionManager tran = new DataSourceTransactionManage ...

  7. spring手动回滚

    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); 转载于:https://www.cnblogs.com/x ...

  8. springboot 事务手动回滚_来,讲讲Spring事务有哪些坑?

    来自公众号:孤独烟 引言 今天,我们接上文<面试官:谈谈你对mysql事务的认识>的内容,来讲spring中和事务有关的考题! 因为事务这块,面试的出现几率很高.而大家工作中CRUD的比较 ...

  9. SpringBoot异常处理回滚事务详解(自动回滚、手动回滚、部分回滚)

    参考:https://blog.csdn.net/zzhongcy/article/details/102893309 概念 事务定义 事务,就是一组操作数据库的动作集合.事务是现代数据库理论中的核心 ...

最新文章

  1. linux设置nexus开机自启动_在linux中使用nexus搭建maven私服
  2. Too many connections解决方法
  3. 关于网站URL转码的问题
  4. 【GIF动画+完整可运行源代码】C++实现 冒泡排序——十大经典排序算法之一
  5. HTTP 和 WebSocket的区别
  6. 三维点云学习(3)7- 实现GMM
  7. 16级大一c语言考试题及答案,2013年计算机二级C语言上机试题十六及答案
  8. 调度流程图_怎么做大数据工作流调度系统?大厂架构师一语点破!
  9. 最新北京市生活常用电话一览表
  10. 计算机无法更改开机密码,不能修改win7电脑开机密码是怎么回事
  11. iphone通用设置里显示UDID(tweak)
  12. 通过fileProvider接收外部App传递文件路径的一些坑
  13. 信托公司消金小额贷款项目的现金流预测
  14. C#使用iTextSharp合并pdf,添加页码
  15. 论做空工具体验对比,股票下跌可选择 期权?涡轮?CFD差价合约?牛熊交易获利
  16. ubuntu开机登录,操作技巧,嵌入式命令等
  17. MAC 移动硬盘文件显示灰色
  18. Linux内存管理(八):paging_init
  19. centos7使用rpmbuild制作rpm包
  20. [DAQmx]创建虚拟通道时应当注意的基本问题

热门文章

  1. list Control实现单元格编辑与插入Combo Box
  2. WINVER和_WIN32_IE等宏的含义
  3. C++中空指针调用类成员函数的原理
  4. API---有意思的API
  5. docker端口映射或启动容器时报错 driver failed programming external connectivity on endpoint
  6. MySQL(五)MySQL事务
  7. Python中的匿名函数和函数式编程
  8. 测试:将手机摄像头用作网络摄像头的拍摄效果
  9. 叶琰:AI压缩技术在追上传统编码技术
  10. LiveVideoStackCon 2019上海 优秀出品人与讲师