spring的事务传播级别及场景


PROPAGATION_REQUIRED :默认事务类型,如果没有,就新建一个事务;如果有,就加入当前事务。适合绝大多数情况。[关键点:是同一个事务]

   场景:  

不同的类,class1,class2

class1.fun1--->class2.fun2: fun1调用fun2 ,无论在fun1还是fun2里发生unchecked异常[不论是否catch处理异常],都会触发整个方法的回滚.

PROPAGATION_REQUIRES_NEW:如果没有,就新建一个事务;如果有,就将当前事务挂起.[关键点:2个事务是单独的,没有依赖关系]

  场景:

 class1.fun1--->class2.fun2: fun1调用fun2 ,

如果fun2抛出异常且被catch处理,则fun2回滚,fun1不回滚.

如果fun2抛出异常且没被catch处理,则fun2,fun1都回滚.

如果fun1抛出异常,则fun1回滚,fun2不回滚. 

PROPAGATION_NESTED:如果没有,就新建一个事务;如果有,就在当前事务中嵌套其他事务。[关键点:2个事务是依赖关系,fun2依赖fun1]

  场景:

 class1.fun1--->class2.fun2: fun1调用fun2,

如果fun2抛出异常且在fun1里catch处理了,则fun2回滚,fun1不回滚, 如果没有catch,则fun1也回滚.

如果fun1抛出异常,则fun1和fun2都回滚.

 特别注意: 当Spring的事务在同一个类时,它的自我调用时事务将失效.

原文地址:https://www.cnblogs.com/stxyg/p/5952736.html