1. 程式人生 > 其它 >spring事務失效的8大場景

spring事務失效的8大場景

1、資料庫引擎不支援事務

從MySQL 5.5.5 開始的預設儲存引擎是:InnoDB,之前預設的都是:MyISAM,所以這點要值得注意,底層引擎不支援事務再怎麼搞都是白搭。

2、類沒有被spring管理

類上少了類似:@Component,@Controller,@Service, @Mapper或@Repository等註解。

3、@Transactional註解用在了非public修飾的方法上

4、同一個類中方法互相呼叫(自呼叫)

同一個類中方法A呼叫方法B(B方法上有@Transactional),無論方式A上是否有事務註解都會引起事務失效,因為只有當事務方法被當前類以外的程式碼呼叫時,才會由spring生成代理物件,通俗點講:自呼叫時該類對> 象還沒有被spring管理。

5、傳播行為配置成了不支援事務:Propagation.NOT_SUPPORTED表示不以事務執行,當前若存在事務則掛起。

6、異常被try-catch“吃掉了”

例如:Service中的方法丟擲了一個異常,然而在controller中又對異常進行的try-catch,service丟擲異常表示要回滾,然後controller中又對異常進行了捕獲和處理,controller中就會認為當前方法是正常提> 交的,不需要回滾,事務自然就會失效。

7、資料來源沒有配置事務管理器

8、異常型別不匹配