首页 > 编程语言 > 详细

spring 事务传播机制

时间:2019-04-15 15:01:13      阅读:484      评论:0      收藏:0      [点我收藏+]

spring 事务 传播机制 描述的 事务方法直接相互调用,父子事物开启,挂起,回滚 等的处理方式。 绿色的 那几个 我认为比较重要。

 

1 , @Transactional(propagation=Propagation.REQUIRED)  默认值 等于 @Transactional

   有父方法传递过来的 事务环境,就在使用父方法的事务环境,如果父方法没有事务环境,那么就用新开启一个事物。

   备注:非事务执行的意思是单条sql就提交。

 

 

  例子设置: A 方法调用 B,C两个子方法。C执行后在C的方法中抛出异常

    情景1  条件:A 什么都不加,B 什么都不加,C,Propagation.REQUIRED ,

        结果:C 执行以后抛出异常。结果 B能写入 ,C写入的被回滚。

    解析:A,B都是非事物环境,C起了一个新的事务。 

    

    情景2  条件:A 加 @Transactional ,B 什么都不加,C,Propagation.REQUIRED ,

        结论:B C 的操作都回滚了

    解析:B,C都是用的 A开启的事务环境,C的时候抛出异常, 全部回滚。

 

 

  关键字:有就用,没有就新建一个

 

2 ,@Transactional( propagation=Propagation.SUPPORTS)

  如果父方法没有事物换机,那么当前方法就使用非事务环境执行,如果 有,就使用父方法的事务环境。

 

  例子设置: A 方法调用 B,C两个子方法。C执行后在C的方法中抛出异常

    情景1  条件:A 什么都不加,B 什么都不加,C,Propagation.SUPPORTS,

        结果:B,C 都能写入成功

    解析:ABC,都是非事务环境 

    

   情景2  条件:A @Transactional ,B 什么都不加,C,Propagation.SUPPORTS,

        结果:B,C 都能写入后都回滚了,

    解析:ABC,都处于A开启的事务环境。

  关键字:有就用,没有就不用

 

 

3 @Transactional(propagation=Propagation.MANDATORY)

   当前方法必须处于事物环境才能执行。

 例子设置: A 方法调用 B,C两个子方法。

    情景1  条件:A 什么都不加,B 什么都不加,C,Propagation.MANDATORY,

        结果:执行C的时候抛出异常( No existing transaction found for transaction marked with propagation ‘mandatory‘ )

    解析:C 需要事物环境才能执行

    

   情景2  条件:A @Transactional ,B 什么都不加,C,Propagation.MANDATORY,

        结果: 正常执行到 

    解析:C 需要事物环境才能执行

  关键字:必须要父类给我一个事务环境

 

 

 

 

 

4 @Transactional(propagation=Propagation.REQUIRES_NEW)

   必定要新开启一个事务。

 例子设置: A 方法调用 B,C两个子方法。C执行后在C的方法中抛出异常

    情景1  条件:A 什么都不加,B 什么都不加,C,Propagation.REQUIRES_NEW,

        结果:B 能写入,C 写入后被回滚了。

    解析:在父类没有事务环境的情况下,C启动了一个新的事务

    

   情景2  条件:A @Transactional ,B 什么都不加,C,Propagation.REQUIRES_NEW,

        结果: B,C都没有写入数据

    解析: 明显C 让父类事务一起回滚了。C如果 回滚,父类事物也会回滚。

 

  情景3  条件:A @Transactional ,B 什么都不加,C,Propagation.REQUIRES_NEW, 去掉 C执行后在C的方法中抛出异常,在A中 执行完C后抛出异常。

        结果: B的数据没写进去,C的数据写进去;额

    解析: B 使用的A开启的事物 ,C 开启了一个新事物。并且C执行完成以后就提交了,A 里面的异常让B一起回滚了。

  关键字:新建一个,父回滚子不回滚,子回滚,父也会滚。 并且子事物是在 子方法完成的时候提交的。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

spring 事务传播机制

原文:https://www.cnblogs.com/cxygg/p/10710572.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!