今天項目中須要使用到事務,因此在這裏將SpringBoot的事務實現方式學習一下java
SpringBoot中使用事務會使用到@Transactional這個註解來實現spring
先來對Transactional註解有個大體瞭解數據庫
1.其上註解數組
@Target({ElementType.METHOD, ElementType.TYPE})//METHOD:用於描述方法,TYPE:用於描述類、接口(包括註解類型) 或enum聲明 @Retention(RetentionPolicy.RUNTIME)//註解不只被保存到class文件中,jvm加載class文件以後,仍然存在 @Inherited//闡述了某個被標註的類型是被繼承的 @Documented//代表這個註解應該被 javadoc工具記錄
2.屬性 併發
2.1 rollbackFor(這就是我今天使用到的屬性)jvm
指定哪些異常須要進行事務回滾,這裏能夠設置異常數組,一般爲RuntimeException.class、Exception.class工具
2.2 value和2.3 transactionManager(由於使用了AliasFor註解,value和transactionManager互爲別名)學習
這兩個放在一塊兒講,若是咱們沒有指定,默認爲上下文中聲明的名稱爲「transactionManager」,pringboot會自動配置一個 DataSourceTransactionManager
spa
2.4 propagation 默認爲Propagation.REQUIREDcode
用於設置事務的傳播行爲,業務方法須要在一個事務中運行,若是方法運行時,已處在一個事務中,那麼就加入該事務,不然本身建立一個新的事務.這是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方法上纔有效