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都回滾。或者自定義事務異常類進行回滾