Spring Boot事物Transactional不起作用排除

(本文出自oschina博主文章:https://my.oschina.net/happyBKs/blog/1624482)
spring對事務的管理,之前的博客文章中也介紹過,不再詳細累述。
本文想說的是,當@Transactional不起作用如何排查問題。

可以按照以下幾個步驟逐一確認:

  1. 首先要看數(shù)據(jù)庫本身對應的庫、表所設置的引擎是什么。MyIsam不支持事務,如果需要,則必須改為InnnoDB。

  2. @Transactional所注解的方法是否為public

  3. @Transactional所注解的方法所在的類,是否已經(jīng)被注解@Service或@Component等。

  4. 需要調用該方法,且需要支持事務特性的調用方是在在 @Transactional所在的類的外面。注意:類內部的其他方法調用這個注解了@Transactional的方法,事務是不會起作用的。

  5. 注解為事務范圍的方法中,事務的回滾僅僅對于unchecked的異常有效。對于checked異常無效。也就是說事務回滾僅僅發(fā)生在出現(xiàn)RuntimeException或Error的時候。
    如果希望一般的異常也能觸發(fā)事務回滾,需要在注解了@Transactional的方法上,將 @Transactional回滾參數(shù)設為:

    @Transactional(rollbackFor=Exception.class)
    
  6. 非springboot項目,需要檢查spring配置文件xml中:

    • 掃描包范圍是否配置好,否則不會在啟動時spring容器中創(chuàng)建和加載對應的bean對象。
    <context:component-scan base-package="com.happybks" ></context:component-scan>
    
    • 事務是否已經(jīng)配置成開啟
    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
    
  7. springboot項目有兩個可選配置,默認已經(jīng)支持事務了,可以寫也可以不寫。

    • springboot啟動類,即程序入口類,需要注解@EnableTransactionManagement
    package com.happybks.pets;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    
    @EnableTransactionManagement
    @SpringBootApplication
    public class PetsApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(PetsApplication.class, args);
        }
    }
    
    • springboot配置文件application.yml中,可以配置上失敗回滾:
    spring:
       profiles:
          active: prod
       datasource:
          driver-class-name: com.mysql.jdbc.Driver
          url: jdbc:mysql://127.0.0.1:3306/spbdb
          username: root
          password:
      jpa:
          hibernate:
          ddl-auto:
          show-sql: true
      transaction:
          rollback-on-commit-failure: true
    
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容