Springboot @Transactional 事務不回滾


一、異常捕獲的原因

  1. 這里Exception異常,他又分為運行時異常RuntimeException和非運行時異常
  2. 可查的異常(checked exceptions):Exception下除了RuntimeException外的異常
  3. 不可查的異常(unchecked exceptions):RuntimeException及其子類和錯誤(Error)
  4. 異常checked例外也回滾:在整個方法前加上 @Transactional(rollbackFor=Exception.class)
  5. 異常unchecked例外不回滾: @Transactional(notRollbackFor=RunTimeException.class)
  6. 如果異常被try{}catch{}了,事務就不回滾了,如果想讓事務回滾必須再往外拋try{}catch{throw Exception}

 

二、數據庫引擎不支持回滾(使用MYSQL就很可能是這個原因)

  1. Mysql數據庫有兩種引擎,注意要使用支持事務的引擎,比如innodb,如果是MyISAM,事務是不起作用的。
  2. 使用springboot的jpa自動創建庫表的時候,默認使用MyISAM引擎,可以檢查庫表查看引擎。
  3. 修改配置:
    spring:  
      jpa:
        hibernate:
          ddl-auto: update
          naming:
            physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl #按字段名字建表
        show-sql: true
        database: mysql
        database-platform: org.hibernate.dialect.MySQL5InnoDBDialect  #使用innodb引擎建表

     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM