SpringBoot中添加事務


今天項目中需要使用到事務,所以在這里將SpringBoot的事務實現方式學習一下

SpringBoot中使用事務會使用到@Transactional這個注解來實現

  先來對Transactional注解有個大致了解

  1.其上注解

@Target({ElementType.METHOD, ElementType.TYPE})//METHOD:用於描述方法,TYPE:用於描述類、接口(包括注解類型) 或enum聲明
@Retention(RetentionPolicy.RUNTIME)//注解不僅被保存到class文件中,jvm加載class文件之后,仍然存在
@Inherited//闡述了某個被標注的類型是被繼承的
@Documented//表明這個注解應該被 javadoc工具記錄

  2.屬性 

    2.1 rollbackFor(這就是我今天使用到的屬性)

      指定哪些異常需要進行事務回滾,這里可以設置異常數組,通常為RuntimeException.class、Exception.class

    2.2 value和2.3 transactionManager(因為使用了AliasFor注解,value和transactionManager互為別名)

      這兩個放在一起講,如果我們沒有指定,默認為上下文中聲明的名稱為“transactionManager”,pringboot會自動配置一個 DataSourceTransactionManager

    2.4 propagation 默認為Propagation.REQUIRED

      用於設置事務的傳播行為,業務方法需要在一個事務中運行,如果方法運行時,已處在一個事務中,那么就加入該事務,否則自己創建一個新的事務.這是spring默認的傳播行為

    2.5 isolation 默認為  Isolation.DEFAULT

      用於設置底層數據庫的事務隔離級別,事務隔離級別用於處理多事務並發的情況,通常使用數據庫的默認隔離級別即可,基本不需要進行設置

    2.6 timeout 默認為-1,表示永不超時

      用於設置事務的超時秒數

    2.7 readOnly 默認為false 

      設置當前事務是否為只讀事務

    2.8 rollbackForClassName (這個和rollbackFor最大的區別就是一個是指定異常類,一個是指定異常類名)

    2.9 noRollbackFor(這個應該就是忽略哪些異常)

    2.10 noRollbackForClassName(這個我覺得不需要我詳細說明了)

  3.實際使用(這算是手動回滾使用)

    1.首先在我們需要使用事務的Service層的方法上添加@Transactional注解

    2.rollbackFor配置我們需要捕獲的哪些異常來進行事務回滾

    3.其他參數按照自己實際需求來添加

    4.方法中捕獲這個異常,然后調用

      TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

注意:

  1.@Transactional注解必須應用到public方法上才有效


免責聲明!

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



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