Spring事務控制和傳遞性理解


1、在同一類方法間相互調用,如果調用方無事務控制,被調用方有事務控制,則被調用方也無事務

原因:外部經過spring容器調用service的方法事務才生效,service類內部方法間相互調用事務不生效,也就是傳說中的自調用失效問題。主要原因是 Spring數據庫事務的約定,其實現原理是AOP,而AOP的原理是動態代理,在自調用的過程中,是類自身的調用,而不是代理對象去調用,那么就不會產生AOP,這樣 Spring就不能把你的代碼織入到約定的流程中,於是就產生了現在看到的失敗場景。

2、默認事務傳遞性)事務控制A調用事務控制B,如果B拋異常,A處理異常,則整個事務會回滾,同時報錯Transaction rolled back because it has been arked as rollback-only

 如圖所示:箭頭表示的2個方法都有事務,外面的事務捕獲了里面的事務

 

原因:事務的傳遞性,因為A調用B,所以A和B都是同一個事務對象,B使用A的事務對象,成為一個整理,B拋異常已經將事務對象設值為需回滾狀態(RollbackOnly)了,除非B中直接處理異常,當外層事務處理異常想提交整個事務時,出現異常Transaction rolled back because it has been arked as rollback-only

3、事務控制的方法中異步線是沒有事務控制的


免責聲明!

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



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