導致Spring事務失效的原因有哪些?
?一位2年工作經(jīng)驗的小伙伴被問到這樣一道面試題,說請你談談導致Spring事務失效的原因有哪些?
今天,我給大家分享一下我的理解。
下面給大家總結一下,導致Spring事務失效的原因主要有以下8個:
1、方法沒有被public修飾
在開發(fā)過程中,如果@Transactional事務注解添加在不是public修飾的方法上,這個時候,Spring的事務就會失效。
2、類沒有被Spring托管
如果事務方法所在的類沒有加載到Spring IoC容器中,也就是說,事務方法所在的類沒有被Spring管理,從而導致Spring無法實現(xiàn)代理,所以,Spring事務也會失效。
3、不正確的異常捕獲
如果事務方法拋出異常被 catch 處理了,導致 @Transactional 無法回滾而導致事務失效。
4、同一類中方法調用
如果同一個類中的兩個方法分別為A和B,方法A上沒有添加事務注解,方法B上添加了 @Transactional事務注解,方法A調用方法B,那么,方法B的事務會失效。
5、propagation事務傳播行為配置錯誤
如果內部方法的事務傳播類型為不支持事務的傳播類型,那么,內部方法的事務在Spring中會失效。
6、rollbackFor參數(shù)設置錯誤
如果在@Transactional注解中rollbackFor參數(shù)標注了錯誤的異常類型,那么,Spring事務的回滾就無法識別,導致事務回滾失效。
7、沒有配置事務管理器
即使在代碼中使用了Spring的事務管理的功能,但是在項目中,如果沒有配置Spring的事務管理器,Spring的事務也不會生效。
8、數(shù)據(jù)庫本身不支持事務
Spring事務生效的前提是所連接的數(shù)據(jù)庫要支持事務,如果底層的數(shù)據(jù)庫都不支持事務,那么,Spring的事務肯定會失效。例如,如果使用的數(shù)據(jù)庫為MySQL,并且選用了MyISAM存儲引擎,則Spring的事務就會失效。
以上就是我對Spring事務失效原因的理解。