Spring事務(wù)什么時候會失效?
Spring事務(wù)的原理是AOP,進行了切面增強,那么失效的根本原因是這個AOP不起作用了!常見情況有如下幾種
1、發(fā)生自調(diào)用,類里面使用this調(diào)用本類的方法(this通常省略),此時這個this對象不是代理類,而是 UserService對象本身!
解決方法很簡單,讓那個this變成UserService的代理類即可!
2、方法不是public的
@Transactional 只能用于public 的方法上,否則事務(wù)不會失效,如果要用在非public 方法上,可以開啟 Aspectj 代理模式。
3、數(shù)據(jù)庫不支持事務(wù)
4、沒有被spring管理
5、異常被吃掉,事務(wù)不會回滾(或者拋出的異常沒有被定義,默認(rèn)為RuntimeException)