springboot @Transactional事務失效

@Transactional聲明式事務是基于AOP的

而AOP是基于動態(tài)代理實現(xiàn)的

所以不想要讓事務失效,就要使用代理對象的方法

所以問題就是什么情況下他不會走到代理對象的方法

1.同一個類當中的方法調用

不管你是調用的公有方法還是私有方法他都是通過this調用的真實對象不會走到代理的

2.調用的是static方法

因為這種方法他是屬于類的,并不是某個對象的,所以他是無法被代理對象調用的

3.final方法也是無法走代理的

因為aop創(chuàng)建的代理對象無法對final方法進行子類化和覆蓋,所以無法攔截這些方法的

除此之外,失效還可能和Transactional中注解的兩個屬性有關

一個是propagation 一個是rollbackFor
propagation設置錯誤,比如說設置成了 not_supported 那么事務肯定是會失效的

而rollbackFor 他默認只處理RuntimeException的,如果發(fā)生了別的異常,事務是不會回滾的,所以需要特別注意,我們需要手動設置為 Exception

另外如果異常唄捕獲了,不管是方法內部捕獲了,還是別的切面優(yōu)先給捕獲了,都是不會回滾的

還有就是有得數(shù)據(jù)庫他不支持事務那這種情況spring再牛逼也無能為力

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容