1. 程式人生 > >Spring宣告式事務不回滾問題

Spring宣告式事務不回滾問題

在使用Spring事務的時候我們經常使用註解@Transactional來宣告事務,下面讓我們來看一下Spring事務存在的坑。

內部呼叫方法不會走代理方式呼叫,而是類內部的函式呼叫,有事務註解也不會開啟事務,但是當A有事務呼叫B時,B會加入A事務中,使之為同一事務。

解決方法:1,通過代理呼叫內部方法  2.自己注入自己呼叫,這樣注入的就是代理物件了

"this物件:"+this.getClass().getName()可以檢視是否代理

上圖條件為:A無事務 ,B有事務。主函式呼叫A方法,A方法呼叫B方法,B方法有異常

實驗結果:A,B方法均未回滾,咦TMLGB為啥呢。。。。

我們再來試驗:

上圖條件為:A有事務 ,B無事務。主函式呼叫A方法,A方法呼叫B方法,B方法有異常

實驗結果:A,B方法都回滾了

結論:當內部呼叫方法時,並不會通過代理類呼叫並開啟事務,與普通方法呼叫一樣,所以當A無事務時,AB均無事務,當A有事務時,B會加入到A事務中二者同一事務。