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面試題與答案】整理推薦