springboot 事務 @Transactional 失效

一般失效有這麼幾種情況

1、檢查數據庫的引擎是否是innoDB

2、啓動類上是否加入@EnableTransactionManagement註解  (其實使用 springboot 的話這個不加也可以 應爲默認是true)

3、是否在方法上加入@Transactional註解或Service的類上是否有@Transactional註解

4、方法是否爲public

5、是否是因爲拋出了Exception等checked異常 

6 、該事務所在的類是否在加載的時候使用了spring的切面

 

但是我這裏出現了一個問題 , 當我整合 shiro的時候 發現事務失效 其原因是 因爲 Shiro 的ShiroFilterFactoryBean實現了FactoryBean接口 那麼它會提前被加載 這個時候我在使用shiro的時候 注入了 userService   所以它會提前被初始化 沒有被spring 接管注入 導致了當使用 Transactional 的時候 spring 無法使用aop 代理 無法回滾

 

這就是最關鍵的一個點 , sysUserServiceImpl 是由 customRealm  被注入的時候創建的 不是spring 創建的  而 customRealm  是由shiro 初始化的時候加載的

21:17:01.585 logback [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Autowiring by type from bean name 'customRealm' via constructor to bean named 'sysUserServiceImpl'

 

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