Spring中@Transactional(rollbackFor=Exception.class)屬性用法介紹
序言
今天我在寫代碼的時候,看到瞭。一個註解@Transactional(rollbackFor = Exception.class),今天就和大傢分享一下,這個註解的用法;
異常
如下圖所示,我們都知道Exception分為運行時異常RuntimeException和非運行時異常
error是一定會回滾的
如果不對運行時異常進行處理,那麼出現運行時異常之後,要麼是線程中止,要麼是主程序終止。
如果不想終止,則必須捕獲所有的運行時異常,決不讓這個處理線程退出。隊列裡面出現異常數據瞭,正常的處理應該是把異常數據舍棄,然後記錄日志。不應該由於異常數據而影響下面對正常數據的處理。
非運行時異常是RuntimeException以外的異常,類型上都屬於Exception類及其子類。如IOException、SQLException等以及用戶自定義的Exception異常。對於這種異常,JAVA編譯器強制要求我們必需對出現的這些異常進行catch並處理,否則程序就不能編譯通過。所以,面對這種異常不管我們是否願意,隻能自己去寫一大堆catch塊去處理可能的異常。
事務管理方式
事務管理對於企業應用來說是至關重要的,即使出現異常情況,它也可以保證數據的一致性。
spring支持編程式事務管理和聲明式事務管理兩種方式。
- 編程式事務管理使用TransactionTemplate或者直接使用底層的PlatformTransactionManager。對於編程式事務管理,spring推薦使用TransactionTemplate。
- 聲明式事務管理建立在AOP之上的。其本質是對方法前後進行攔截,然後在目標方法開始之前創建或者加入一個事務,在執行完目標方法之後根據執行情況提交或者回滾事務。
- 聲明式事務管理也有兩種常用的方式,一種是基於tx和aop名字空間的xml配置文件,另一種就是基於@Transactional註解。顯然基於註解的方式更簡單易用,更清爽。
使用說明
當作用於類上時,該類的所有 public 方法將都具有該類型的事務屬性,同時,我們也可以在方法級別使用該標註來覆蓋類級別的定義。
在項目中,@Transactional(rollbackFor=Exception.class),如果類加瞭這個註解,那麼這個類裡面的方法拋出異常,就會回滾,數據庫裡面的數據也會回滾。
在@Transactional註解中如果不配置rollbackFor屬性,那麼事物隻會在遇到RuntimeException的時候才會回滾,加上rollbackFor=Exception.class,可以讓事物在遇到非運行時異常時也回滾
@Transactional註解的全部屬性詳解
@Transactional屬性
屬性 | 類型 | 描述 |
---|---|---|
value | String | 可選的限定描述符,指定使用的事務管理器 |
propagation | enum: Propagation | 可選的事務傳播行為設置 |
isolation | enum: Isolation | 可選的事務隔離級別設置 |
readOnly | boolean | 讀寫或隻讀事務,默認讀寫 |
timeout | int (in seconds granularity) | 事務超時時間設置 |
rollbackFor | Class對象數組,必須繼承自Throwable | 導致事務回滾的異常類數組 |
rollbackForClassName | 類名數組,必須繼承自Throwable | 導致事務回滾的異常類名字數組 |
noRollbackFor | Class對象數組,必須繼承自Throwable | 不會導致事務回滾的異常類數組 |
noRollbackForClassName | 類名數組,必須繼承自Throwable | 不會導致事務回滾的異常類名字數組 |
到此這篇關於Spring中@Transactional(rollbackFor=Exception.class)屬性用法介紹的文章就介紹到這瞭。希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。
推薦閱讀:
- springBoot service層事務控制的操作
- Java spring事務及事務不生效的原因詳解
- 詳細談談Spring事務是如何管理的
- Java @Transactional指定回滾條件
- Spring超詳細講解事務