springboot聲明式@Transactional事務失效的原因

原因:
1、檢查你方法是不是public的
2、你的異常類型是不是unchecked異常還是check異常
3、數據庫引擎要支持事務,如果是MySQL,注意表要使用支持事務的引擎,比如innodb,如果是myisam,事務是不起作用的
4、是否開啓了對註解的解析
<tx:annotation-driven transaction-manager=“transactionManager” proxy-target-class=“true”/>
5、spring是否掃描到你這個包,如下是掃描到org.test下面的包
<context:component-scan base-package=“org.test” ></context:component-scan>1
6、檢查是不是同一個類中的方法調用(如a方法調用同一個類中的b方法)
7、異常是不是被你catch住了

解決方法:
1.@Transactional基於AOP,只能攔截public修飾的方法。
2.unchecked與check異常區別參照《java異常分類詳解》,解決方法參照這篇文章《java拋出異常導致事務失效》
3.
6.兩個方法都需要@Transactional修飾,因爲同一個類方法中事務是不能傳遞的。
7.catch住異常,處理完異常後必須要手動拋出異常,解決方法參考方法2。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章