创建事务信息流程图

Spring 5.x 源码之旅七十七事务细节分析六

处理提交流程图

Spring 5.x 源码之旅七十七事务细节分析六

处理回滚流程图

Spring 5.x 源码之旅七十七事务细节分析六

外层是REQUIRED有异常捕获内层是NESTED

Spring 5.x 源码之旅七十七事务细节分析六
Spring 5.x 源码之旅七十七事务细节分析六

事务状态

外层:
Spring 5.x 源码之旅七十七事务细节分析六
内层用外层的连接,而且不是新事务,不是新同步:
Spring 5.x 源码之旅七十七事务细节分析六

异常回滚

内层直接进保存点回滚:
Spring 5.x 源码之旅七十七事务细节分析六
会重置连接持有器的回滚标记:
Spring 5.x 源码之旅七十七事务细节分析六
外层因为有异常捕获,而且连接持有器的回滚标记是false,所以成功提交。

外层是REQUIRED有异常内层是NESTED

Spring 5.x 源码之旅七十七事务细节分析六
Spring 5.x 源码之旅七十七事务细节分析六
结果是全回滚,因为内层成功了提交就把保存点上方了,其他什么都不做,然后外层遇到异常就直接回滚了。

所以这里就是一个好的例子,如果内层业务出了异常,外层捕获后就不会影响外层。比如前面说过的插入数据在外层,内层是打日志,就算打日志出现异常,也只是影响日志,外部的数据插入还是可以的,反过来如果日志没问题,但是外面数据插入出异常,整个都回滚,可以符合我们的一些业务。

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。

相关文章:

  • 2021-05-08
  • 2021-07-28
  • 2022-12-23
  • 2021-12-17
  • 2021-05-04
  • 2021-06-30
  • 2021-08-09
  • 2021-12-21
猜你喜欢
  • 2021-09-21
  • 2022-01-12
  • 2021-07-20
  • 2021-06-24
  • 2022-12-23
  • 2022-12-23
  • 2021-10-02
相关资源
相似解决方案