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的事務在同一個類時,它的自我調用時事務將失效.