1.同一個類中,即A與B在同一類中,A()調用B()方法,A不加 @Transactional 事務注解,B加 @Transactional 事務注解,則B中的事務不起作用,A加事務,才會起作用,B中若將異常捕獲,事務也不起作用
@Transactional //A加事務才會起作用 public void A(){ B(); } -------------------------------- @Transactional //B加不加事務無影響 public void B(){ try{ throw new Exception(); }catch(Exception e){//B中將異常鋪貨未能拋出到A中,事務也不起作用 } }
2.不同類中,即A在A類中,B在B類中,A調用B,A與B事務獨立,此時A不加事務B加事務,B中事務可生效,則可將需要加事務的代碼塊抽取出放入其他類的方法中加事務來實現部分代碼事務回滾
public void A(){ abcabc; try{ B(); }catch(Exception e){ } defdef;//B中發生異常事務回滾,不影響方法A } -------------------------------- @Transactional public void B(){ throw new Exception(); }
3.
PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED區別: