1 PROPAGATION_REQUIRED :默认事务类型,如果没有,就新建一个事务;如果有,就加入当前事务。适合绝大多数情况。[关键点:是同一个事务]
场景:
不同的类,class1,class2
class1.fun1--->class2.fun2: fun1调用fun2 ,无论在fun1还是fun2里发生unchecked异常[不论是否catch处理异常],都会触发整个方法的回滚.
2 PROPAGATION_REQUIRES_NEW:如果没有,就新建一个事务;如果有,就将当前事务挂起.[关键点:2个事务是单独的,没有依赖关系]
场景:
class1.fun1--->class2.fun2: fun1调用fun2 ,
如果fun2抛出异常且被catch处理,则fun2回滚,fun1不回滚.
如果fun2抛出异常且没被catch处理,则fun2,fun1都回滚.
如果fun1抛出异常,则fun1回滚,fun2不回滚.
3 PROPAGATION_NESTED:如果没有,就新建一个事务;如果有,就在当前事务中嵌套其他事务。[关键点:2个事务是依赖关系,fun2依赖fun1]
场景:
class1.fun1--->class2.fun2: fun1调用fun2,
如果fun2抛出异常且在fun1里catch处理了,则fun2回滚,fun1不回滚, 如果没有catch,则fun1也回滚.
如果fun1抛出异常,则fun1和fun2都回滚.
特别注意: 当Spring的事务在同一个类时,它的自我调用时事务将失效.