Spring 事務 @Transactional 不起作用?


Spring 事務 @Transactional 不起作用?


場景

一個類中有兩個方法,分別是A 和 B,方法A調用方法B,方法B有事務註解,方法A沒有事務註解,當發生異常是,沒有回滾。

直接看代碼,更直觀


Spring 事務 @Transactional 不起作用?

測試用例

Spring 事務 @Transactional 不起作用?

結論

方法B雖然已經有事務註解,但是並不會回滾。

底層原因

Spring採用動態代理(AOP)實現對bean的管理和切片,每個class生成一個代理對象。只有在代理對象之間進行調用時,可以觸發切面邏輯。而在同一個class中,方法A調用方法B,調用的是原對象的方法,而不通過代理對象。所以Spring無法切到這次調用,也就無法通過註解保證事務性了。

解決方案

同一個類中需要事務的方法都加上事務註解。


分享到:


相關文章: