Spring事務控制和傳遞性理解

一、在同一類方法間相互調用,若是調用方無事務控制,被調用方有事務控制,則被調用方也無事務spring

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

二、默認事務傳遞性)事務控制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對象

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

相關文章
相關標籤/搜索