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

【排坑】内外部事务的回滚问题(三)相关推荐

  1. spring 事务应用误区总结:那些导致事务不回滚的坑

    基于JDBC的 Spring事务在项目中常用来保证数据的一致性, 想要正确的使用,绝不是加一个@Transactional那么简单.最近团队内在排查事务不生效的问题时,就遇到了一个很典型的错误应用的场 ...

  2. 异常被 ”吃“ 掉导致事务无法回滚

    我们在处理异常时,有两种方式,要么抛出去,让上一层来捕获处理:要么把异常 try catch 掉,在异常出现的地方给处理掉.就因为有这中 try-catch,所以导致异常被 "吃" ...

  3. 【node】express中mysql的基本用法、连接池的使用、事务的回滚

    [node]express中mysql的基本用法.连接池的使用 安装mysql包 mysql的配置信息 mysql基本操作 查询mysql并渲染数据 mysql插入操作 首先在html页面写上< ...

  4. spring@Transactional注解事务不回滚不起作用无效的问题处理

    这几天在项目里面发现我使用@Transactional注解事务之后,抛了异常居然不回滚.后来终于找到了原因. 如果你也出现了这种情况,可以从下面开始排查. 一.特性 先来了解一下@Transactio ...

  5. Spring事务异常回滚,try catch 捕获异常不回滚

    Spring事务异常回滚,try catch 捕获异常不回滚 参考文章: (1)Spring事务异常回滚,try catch 捕获异常不回滚 (2)https://www.cnblogs.com/GH ...

  6. Spring事务异常回滚,捕获异常不抛出就不会回滚

    Spring事务异常回滚,捕获异常不抛出就不会回滚 参考文章: (1)Spring事务异常回滚,捕获异常不抛出就不会回滚 (2)https://www.cnblogs.com/chen-lhx/p/6 ...

  7. 为什么catch了异常,但事务还是回滚了?

    前几天我发了这篇文章<我来出个题:这个事务会不会回滚?>(https://blog.didispace.com/will-this-transcation-rollback/) 得到了很多 ...

  8. springboot 事务手动回滚_Spring Boot中的事务是如何实现的

    1. 概述 一直在用SpringBoot中的@Transactional来做事务管理,但是很少想过SpringBoot是如何实现事务管理的,今天从源码入手,看看@Transactional是如何实现事 ...

  9. java 自定义异常 未回滚_抛出自定义异常,spring AOP事务不回滚的解决方案

    spring AOP 默认对RuntimeException()异常或是其子类进行事务回滚,也就是说 事务回滚:throw new RuntimeException("xxxxxxxxxxx ...

  10. 每日一博 - 常见的Spring事务失效事务不回滚案例集锦

    文章目录 事务不生效 方法内部调用 修复方法一 : [新加一个Service方法] 修复方法二:[在该Service类中注入自己] 修复方法三:[通过AopContent类]<---- 推荐 访 ...

最新文章

  1. 汽车与智能家居互联时代 语音控制很关键
  2. Cortex-M3 异常中断向量表
  3. 【控制】《多智能体系统的动力学分析与设计》徐光辉老师-第7章-不确定分数阶系统的多一致
  4. js如何监听元素事件是否被移除_JavaScript 监听元素是否进入/移出可视区域
  5. Linux的nfs文件服务
  6. android markdown 框架,Android Studio MarkDown风格README的正确打开姿势
  7. 关于在Windows64上编译程序出现相邻变量地址偏移相差32字节问题
  8. 欧洲冠军联赛决赛结束
  9. VC连接SQL2005
  10. 泛微E8的数据展示集成方法
  11. Visual Studio——使用多字节字符集与使用Unicode字符集
  12. 一张图看懂“火星坐标系”
  13. 详细微信小程序API文档
  14. winpe装双系统linux_自制WINPE+MAC安装U盘及双系统存储U盘(增加多系统安装)
  15. 解决Chrome无法翻译此网页
  16. HDAO one error
  17. 什么是URL?URL是什么意思?
  18. TrueCrypt安装及其使用教程
  19. kubeadm 搭建 K8s
  20. 微型计算机核心是主板和内存,低配也能轻松“吃鸡”!《绝地求生:大逃杀》CPU及内存需求测试...

热门文章

  1. 21世纪经济网APP
  2. 自动化测试的点点滴滴经验积累
  3. 一个防御SQL注入攻击需要注意的问题
  4. 关于PChar和String的转换
  5. Fragment真正的完全解析(上)
  6. discuzx3.2自定义积分操作日志,discuzx积分二次开发完全记录
  7. 怎样申请 Google Map apiKey
  8. ip-sysctl.txt 文件
  9. 通过Shiny app实现疫苗预防疾病的过程
  10. R与Python或协同助力机器学习:听Azure ML Studio讲座有感