2023-09-16
原文作者:王伟王胖胖 原文地址: https://blog.csdn.net/wangwei19871103/article/details/105370406

创建事务信息流程图

202309162320390331.png

处理提交流程图

202309162320398032.png

处理回滚流程图

202309162320404733.png

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

202309162320412524.png

202309162320417345.png

事务状态

外层:

202309162320424556.png
内层用外层的连接,而且不是新事务,不是新同步:

202309162320431727.png

异常回滚

内层直接进保存点回滚:

202309162320435938.png
会重置连接持有器的回滚标记:

202309162320440679.png
外层因为有异常捕获,而且连接持有器的回滚标记是false,所以成功提交。

外层是REQUIRED有异常内层是NESTED

2023091623204449610.png

2023091623204495711.png
结果是全回滚,因为内层成功了提交就把保存点上方了,其他什么都不做,然后外层遇到异常就直接回滚了。

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

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

阅读全文