@Transactional 註解失效的場景

1、@Transactional 作用在非 public 修飾的方法上

2、@Transactional 作用於接口,使用 CGLib 動態代理

3、@Transactional 註解屬性 propagation 設置以下三種可能導致無法回滾

  • SUPPORTS:如果當前存在事務,則加入該事務;如果當前沒有事務,則以非事務的方式繼續運行。
  • NOT_SUPPORTED:以非事務方式運行,如果當前存在事務,則把當前事務掛起。
  • NEVER:以非事務方式運行,如果當前存在事務,則拋出異常。

4、同一類中加 @Transactional 方法被無 @Transactional 的方法調用,事務失效

5、@Transactional 方法內異常被捕獲

6、默認 RuntimeException 和 Error 及子類拋出,會回滾;rollbackFor 指定的異常及子類發生纔會回滾

7、數據庫不支持事務,如 MySLQL 使用 MyISAM 存儲引擎

8、Spring 的配置文件中未配置事務註解生效

<tx:annotation-driven transaction-manager="transactionManager"/>

9、Spring Boot 引入 jbdc 或 jpa 包,默認事務註解。若未引入這兩個包,需要使用 @EnableTransactionManagement 進行配置

 

 


【Java面試題與答案】整理推薦

 

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