mysql回滾數據,Spring事務在哪幾種情況下會失效?
大概列舉幾種情況,僅供參考;
1. 直接new出來的對象添加事務不起作用,因為只有spring定義的bean才接受事務。
2.由于mysql的引擎用Myisam不支持事務,所以如果使用mysql的myisam引擎的話,事務不起作用。
3.如果@Transaction注解到非public方法上,事務不起作用,這是因為spring的Aop特性。 4.如果在當前類中進行內部調用方法,比如在A類中有a方法和b方法,a方法沒有加@Transaction,b方法加了@Transaction,在方法a中調用方法b,方法b中的事務也不會生效。這是因為spring在掃描bean的時候會自動為標注了@Transaction注解類生成一個代理類,在有注解方法被調用時,實際上是代理類調用的,代理類在調用之前會開啟事務,執行事務操作。但是同類中的方法相互調用,相當于this.b(),此時的b方法并非代理類調用,而是直接通過原有的bean直接調用,所以注解不起作用。
5.異常類型錯誤,如果拋出的runtimeException事務才會回滾。
6.如果異常被catch到,必須要拋出異常,事務才會回滾。