@Transactional 注意事項、方法調用


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.@Transactional(rollbackFor=Exception.class) 可回滾非RuntimeException的事務

4.@Transactional 注解只能應用到 public 可見度的方法上

 

講的比較透徹全面的一篇文章:https://www.ibm.com/developerworks/cn/java/j-master-spring-transactional-use/index.html

 

PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED區別:https://blog.csdn.net/u011285162/article/details/19247711


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM