码迷,mamicode.com
首页 > 其他好文 > 详细

阶段一-01.万丈高楼,地基首要-第2章 单体架构设计与准备工作-2-26 详解事务的传播-3

时间:2019-12-16 22:49:06      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:ted   image   2-2   cat   并且   一个   有一个   提交   Requires   

Nested

如果存在一个事务的话,那么就会开启一个嵌套的事物。这就必须当前有一个事务存在的情况下 ,它才会以一个子事务的框包裹我们的方法 ,那么这就是一种父子事务。是嵌套的。
技术图片
如果当前没有事务,就和required执行是一样。
所以这里我们只会以一个存在的事务方式去讲解。

子事务和requires_new有区别的。requires_new的话是当前有事务的话会开启一个新的事物,也就是会有两个不同的事务。他们提交的时候也是分别去提交的。
技术图片
如果是父子事务,嵌套事务的话,它其实是在一起进行提交的。这一点是要区别开来的。

演示

外层用一个父事务,,这里有段异常的代码by.zero
技术图片
子方法内使用Nested,嵌套事务。并且把异常代码去掉。
技术图片
清空数据库,执行测试.
数据库内没有数据都回滚了。
技术图片

父子前天事务,主方法里面发生异常,嵌套事务里面的数据是会被回滚的。这一点要注意。

如果我们子方法使用的requires_new 它会开启一个新的事物。
技术图片
所以当主方法发生了异常的话 ,子方法是不会受影响的。
技术图片

父-required 子-Nested 这样和两边都使用required是一样的。
两边都是required是两边共用同一个事务,发生异常都会回滚。
主方法用requiresd,子方法用nested。只有主方法抛出异常,子方法才会被回滚。也就是主事务发生异常,子事务是要跟着它进行回滚的。

子事务发生异常的情况

子方法用Nested。子方法异常代码开启。
技术图片

父方法注释异常代码。事务使用required
技术图片
数据库清空
技术图片
运行测试
技术图片




数据库没有任何的内容。
技术图片
没有被catch会影响到我们的主方法。
技术图片

可以去给他追加try catch
技术图片
追加了一个try  catch以后。
技术图片0

save point。try catch 以后主方法的事物就不受子方法的异常影响了。
技术图片
如果下面还有其他的操作 例如 delete、update,都不会收到子事务的影响。Nested事务的解决 方式就是用try catch
技术图片

Nested 总结

技术图片
如果主事务回滚。子事务可以一起回滚。相反,子事务异常,则父事务可以回滚或者不会滚(就是try catch子事务那种情况。就不回滚。)
技术图片

7种事务总的

技术图片

结束



 

阶段一-01.万丈高楼,地基首要-第2章 单体架构设计与准备工作-2-26 详解事务的传播-3

标签:ted   image   2-2   cat   并且   一个   有一个   提交   Requires   

原文地址:https://www.cnblogs.com/wangjunwei/p/12051408.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!