天天看點

Spring事物

有兩個方法m1()和m2(),m1()調用了m2

public void m1() {

      doSth();

      m2();

}

1. m1有事物,m2也有事物

1.1 m2的propagation=Propagation.REQUIRES_NEW

m2将開啟一個新事物,運作在自己的新事物中,與m1點事物是不同的事物,如果m2報錯,則m2復原,m1是否復原,要看m2報的是哪種類型的錯誤,如果是運作時異常且異常未被吃掉(catch住),則m1也復原,如果不是運作時異常m1不復原。

m1中可以通過noRollbackFor={XXX.class}指定事物的復原規則,指定哪些異常不復原。

1.2 m2的propagation=Propagation.REQUIRED

m1和m2運作在m1的事物中。

2.m1無事物, m2有事物

如果m2報錯,則m2復原,m1的代碼是否執行成功,要看m2報的是哪種類型的錯誤,如果是運作時異常且異常未被吃掉(catch住),則m1的代碼不會執行成功,如果不是運作時異常m1會執行成功。