@Transactional事務鎖


一、介紹

    @Transactional是建立在AOP基礎上的,它的本質是對方法的前后進行攔截,在目標方法開始前創建一個事務,在目標方法運行結束時根據運行的情況進行提交或者回滾操作。使用@Transactional不會對代碼造成污染,使用起來簡單便捷。

二、相關的配置

  • readOnly:該屬性用於設置當前事務是否為只讀事務,設置為true表示只讀,false則表示可讀寫,默認值為false。例如:@Transactional(readOnly=true);
  • rollbackFor: 該屬性用於設置需要進行回滾的異常類數組,當方法中拋出指定異常數組中的異常時,則進行事務回滾。例如:指定單一異常類:@Transactional(rollbackFor=RuntimeException.class)指定多個異常類:@Transactional(rollbackFor={RuntimeException.class, Exception.class});
  • rollbackForClassName: 該屬性用於設置需要進行回滾的異常類名稱數組,當方法中拋出指定異常名稱數組中的異常時,則進行事務回滾。例如:指定單一異常類名稱@Transactional(rollbackForClassName=”RuntimeException”)指定多個異常類名稱:@Transactional(rollbackForClassName={“RuntimeException”,”Exception”})。
  • noRollbackFor:該屬性用於設置不需要進行回滾的異常類數組,當方法中拋出指定異常數組中的異常時,不進行事務回滾。例如:指定單一異常類:@Transactional(noRollbackFor=RuntimeException.class)指定多個異常類:@Transactional(noRollbackFor={RuntimeException.class, Exception.class})。
  • noRollbackForClassName:該屬性用於設置不需要進行回滾的異常類名稱數組,當方法中拋出指定異常名稱數組中的異常時,不進行事務回滾。例如:指定單一異常類名稱:@Transactional(noRollbackForClassName=”RuntimeException”)指定多個異常類名稱:@Transactional(noRollbackForClassName={“RuntimeException”,”Exception”})。
  • propagation : 該屬性用於設置事務的傳播行為。例如:@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)。
  • isolation:該屬性用於設置底層數據庫的事務隔離級別,事務隔離級別用於處理多事務並發的情況,通常使用數據庫的默認隔離級別即可,基本不需要進行設置。
  • timeout:該屬性用於設置事務的超時秒數,默認值為-1表示永不超時。

三、注意事項

  • 事務@Transactional的使用必須要放在類的公共public方法中,如果將事務放在protected、private方法上時,他不會報錯,但事務無效。
  • 一個未加@Transactional的父方法A在調用加了@Transactional的子方法B時,若在A中拋出異常,那么事務不會回滾;反之,一個加了@Transactional的父方法A在調用未加@Transactional的子方法B時,若在A中拋出異常,事務仍然生效。
  • 事務的回滾必須有異常拋出,如果加了@Transactional的方法在捕獲了異常卻自己處理了該異常,那么事務不會進行回滾
 
    
 


免責聲明!

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



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