@Transactional注解詳細解讀


@Transactional注解可以作用於接口、接口方法、類以及類方法上

1. 當作用於類上時,該類的所有 public 方法將都具有該類型的事務屬性

2. 當作用在方法級別時會覆蓋類級別的定義

3. 當作用在接口和接口方法時則只有在使用基於接口的代理時它才會生效,也就是JDK動態代理,而不是Cglib代理

4. 當在 protected、private 或者默認可見性的方法上使用 @Transactional 注解時是不會生效的,也不會拋出任何異常

5. 默認情況下,只有來自外部的方法調用才會被AOP代理捕獲,也就是,類內部方法調用本類內部的其他方法並不會引起事務行為,即使被調用方法使用@Transactional注解進行修飾

@Transactional注解的可用參數

readOnly  

該屬性用於設置當前事務是否為只讀事務,設置為true表示只讀,false則表示可讀寫,默認值為false

rollbackFor 

該屬性用於設置需要進行回滾的異常類數組,當方法中拋出指定異常數組中的異常時,則進行事務回滾。

例如: 1. 指定單一異常類:@Transactional(rollbackFor=RuntimeException.class)

2. 指定多個異常類:@Transactional(rollbackFor={RuntimeException.class, BusnessException.class})

rollbackForClassName

該屬性用於設置需要進行回滾的異常類名稱數組,當方法中拋出指定異常名稱數組中的異常時,則進行事務回滾。例如: 1. 指定單一異常類名稱:@Transactional(rollbackForClassName=“RuntimeException”) 2. 指定多個異常類名稱:@Transactional(rollbackForClassName={“RuntimeException”,“BusnessException”})

noRollbackFor

該屬性用於設置不需要進行回滾的異常類數組,當方法中拋出指定異常數組中的異常時,不進行事務回滾

timeout

該屬性用於設置事務的超時秒數,默認值為-1表示永不超時

propagation

該屬性用於設置事務的傳播行為 例如:@Transactional(propagation=Propagation.NOT_SUPPORTED)

 

內容摘自今日頭條


免責聲明!

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



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