事務不生效問題總彙

1,在同一個service中使用 this.xxx() xxx方法的事務不生效

原因:Spring中事務管理是使用AOP代理技術實現的,目標對象自身並沒有事務管理功能的,而是通過代理對象動態增強功能對事務進行增強的。因此當我們在同一個service類中通過一個方法調用另一個方法時,是通過目標對象this對象調用的,目標對象自身並沒有事務管理功能,因此事務不能生效。

解決:

1.1,xml配置:


<aop:aspectj-autoproxy proxy-target-class="true" expose-proxy="true"/>

1.2,將之前使用普通調用的方法,換成使用代理調用:

((TestService)AopContext.currentProxy()).xxx();

1.3,把xxx方法放到其他service

1.4,用異步方法使用其他線程調用xxx方法

2,方法上使用了private、static、final關鍵字事務不生效

解決:使用public

3,spring的事務默認是對RuntimeException進行回滾

解決:添加rollbackfor=Exception.class來表示所有的Exception都回滾。或者自定義事務異常類進行回滾

 

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