【排坑】内外部事务的回滚问题(三)
2019独角兽企业重金招聘Python工程师标准>>>
【前提】:嵌套事务。事务doProcess方法的中调用事务update方法,且可以捕获update方法中抛出的异常,问:doProcess方法既然可以捕获异常,那还会发生回滚操作么?
【代码】:
@Service
public class TestReqJsonProcess implements JsonProcessInterface {private Logger logger = LoggerFactory.getLogger( getClass() );@PersistenceContextprivate EntityManager em;@Autowiredprivate ServJsonUtil servDocUtil;@Autowiredprivate BusiOptUtil busiOptUtil;@Autowiredprivate RTmAppMain rTmAppMain;@Transactionalpublic ServiceDoc doProcess( ServiceDoc servReq ) throws ProcessException {logger.debug("--------------执行开始-外部事务--------------");try {TestReqRequest request = new TestReqRequest();servDocUtil.setBeanProperty( servReq, request );String appNo = request.getAppNo();String remark = request.getRemark();QTmAppMain qTmAppMain = QTmAppMain.tmAppMain;TmAppMain tmAppMain = new JPAQuery( em ).from( qTmAppMain ).where( qTmAppMain.appNo.eq( appNo ) ).singleResult( qTmAppMain );tmAppMain.setRemark(remark);rTmAppMain.save(tmAppMain);logger.debug("外部事务保存对象完成!");busiOptUtil.update(appNo, remark);} catch (Exception e) {e.printStackTrace();}logger.debug("--------------执行结束-外部事务--------------");return servReq;}
}
@Component
public class BusiOptUtil {Logger logger = LoggerFactory.getLogger( this.getClass() );@PersistenceContext private EntityManager em;@Autowiredprivate RTmAppMain rTmAppMain;@Autowiredprivate RTmAppPrimApplicantInfo rTmAppPrimApplicantInfo;@Transactionalpublic void update(String appNo, String remark){QTmAppPrimApplicantInfo qTmAppPrimApplicantInfo = QTmAppPrimApplicantInfo.tmAppPrimApplicantInfo;TmAppPrimApplicantInfo info = new JPAQuery( em ).from( qTmAppPrimApplicantInfo ).where( qTmAppPrimApplicantInfo.appNo.eq( appNo )).singleResult( qTmAppPrimApplicantInfo );info.setCarUse(remark);rTmAppPrimApplicantInfo.save(info);logger.dubug("内部事务保存对象完成");logger.dubug("执行完了作一下"+1/0);}
}
【结果】:运行后发现update回滚,同时doProcess方法也发生了回滚。
【分析】:
1.外部起事务,内部起事务,内外都有Try Catch
内部出错:内部和外部事务都不回滚。
外部出错:内部和外部事务都不回滚。
2.外部起事务,内部起事务,当内部没有Try Catch
内部出错:内部和外部事务都回滚。
外部出错:内部和外部事务都不回滚。
3.外部起事务,内部不起事务,内外都有Try Catch
内部出错:内部和外部事务都不回滚。
外部出错:内部和外部事务都不回滚。
4.外部起事务,内部不起事务,当内部没有Try Catch
内部出错:内部和外部事务都不回滚。
外部出错:内部和外部事务都不回滚。
5.外部不起事务,内部起事务,内外都有Try Catch
内部出错:内部不回滚,外部非事务。
外部出错:内部不回滚,外部非事务。
6.外部不起事务,内部起事务,当内部没有Try Catch
内部出错:内部回滚,外部事务不回滚。
外部出错:内部不回滚,外部非事务。
转载于:https://my.oschina.net/xiaohai945/blog/1795144
【排坑】内外部事务的回滚问题(三)相关推荐
- spring 事务应用误区总结:那些导致事务不回滚的坑
基于JDBC的 Spring事务在项目中常用来保证数据的一致性, 想要正确的使用,绝不是加一个@Transactional那么简单.最近团队内在排查事务不生效的问题时,就遇到了一个很典型的错误应用的场 ...
- 异常被 ”吃“ 掉导致事务无法回滚
我们在处理异常时,有两种方式,要么抛出去,让上一层来捕获处理:要么把异常 try catch 掉,在异常出现的地方给处理掉.就因为有这中 try-catch,所以导致异常被 "吃" ...
- 【node】express中mysql的基本用法、连接池的使用、事务的回滚
[node]express中mysql的基本用法.连接池的使用 安装mysql包 mysql的配置信息 mysql基本操作 查询mysql并渲染数据 mysql插入操作 首先在html页面写上< ...
- spring@Transactional注解事务不回滚不起作用无效的问题处理
这几天在项目里面发现我使用@Transactional注解事务之后,抛了异常居然不回滚.后来终于找到了原因. 如果你也出现了这种情况,可以从下面开始排查. 一.特性 先来了解一下@Transactio ...
- Spring事务异常回滚,try catch 捕获异常不回滚
Spring事务异常回滚,try catch 捕获异常不回滚 参考文章: (1)Spring事务异常回滚,try catch 捕获异常不回滚 (2)https://www.cnblogs.com/GH ...
- Spring事务异常回滚,捕获异常不抛出就不会回滚
Spring事务异常回滚,捕获异常不抛出就不会回滚 参考文章: (1)Spring事务异常回滚,捕获异常不抛出就不会回滚 (2)https://www.cnblogs.com/chen-lhx/p/6 ...
- 为什么catch了异常,但事务还是回滚了?
前几天我发了这篇文章<我来出个题:这个事务会不会回滚?>(https://blog.didispace.com/will-this-transcation-rollback/) 得到了很多 ...
- springboot 事务手动回滚_Spring Boot中的事务是如何实现的
1. 概述 一直在用SpringBoot中的@Transactional来做事务管理,但是很少想过SpringBoot是如何实现事务管理的,今天从源码入手,看看@Transactional是如何实现事 ...
- java 自定义异常 未回滚_抛出自定义异常,spring AOP事务不回滚的解决方案
spring AOP 默认对RuntimeException()异常或是其子类进行事务回滚,也就是说 事务回滚:throw new RuntimeException("xxxxxxxxxxx ...
- 每日一博 - 常见的Spring事务失效事务不回滚案例集锦
文章目录 事务不生效 方法内部调用 修复方法一 : [新加一个Service方法] 修复方法二:[在该Service类中注入自己] 修复方法三:[通过AopContent类]<---- 推荐 访 ...
最新文章
- 汽车与智能家居互联时代 语音控制很关键
- Cortex-M3 异常中断向量表
- 【控制】《多智能体系统的动力学分析与设计》徐光辉老师-第7章-不确定分数阶系统的多一致
- js如何监听元素事件是否被移除_JavaScript 监听元素是否进入/移出可视区域
- Linux的nfs文件服务
- android markdown 框架,Android Studio MarkDown风格README的正确打开姿势
- 关于在Windows64上编译程序出现相邻变量地址偏移相差32字节问题
- 欧洲冠军联赛决赛结束
- VC连接SQL2005
- 泛微E8的数据展示集成方法
- Visual Studio——使用多字节字符集与使用Unicode字符集
- 一张图看懂“火星坐标系”
- 详细微信小程序API文档
- winpe装双系统linux_自制WINPE+MAC安装U盘及双系统存储U盘(增加多系统安装)
- 解决Chrome无法翻译此网页
- HDAO one error
- 什么是URL?URL是什么意思?
- TrueCrypt安装及其使用教程
- kubeadm 搭建 K8s
- 微型计算机核心是主板和内存,低配也能轻松“吃鸡”!《绝地求生:大逃杀》CPU及内存需求测试...