轉:Spring中的@Transactional(rollbackFor = Exception.class)屬性詳解

今天我在寫代碼的時候,看到了。一個註解@Transactional(rollbackFor = Exception.class),今天就和你們分享一下,這個註解的用法;html

 

異常

以下圖所示,咱們都知道Exception分爲運行時異常RuntimeException和非運行時異常spring

error是必定會回滾的數據庫

若是不對運行時異常進行處理,那麼出現運行時異常以後,要麼是線程停止,要麼是主程序終止。 
若是不想終止,則必須捕獲全部的運行時異常,決不讓這個處理線程退出。隊列裏面出現異常數據了,正常的處理應該是把異常數據捨棄,而後記錄日誌。不該該因爲異常數據而影響下面對正常數據的處理。編程


非運行時異常是RuntimeException之外的異常,類型上都屬於Exception類及其子類。如IOException、SQLException等以及用戶自定義的Exception異常。對於這種異常,JAVA編譯器強制要求咱們必需對出現的這些異常進行catch並處理,不然程序就不能編譯經過。因此,面對這種異常無論咱們是否願意,只能本身去寫一大堆catch塊去處理可能的異常。數組

 

事務管理方式  

事務管理對於企業應用來講是相當重要的,即便出現異常狀況,它也能夠保證數據的一致性。線程

spring支持編程式事務管理和聲明式事務管理兩種方式。日誌

   編程式事務管理使用TransactionTemplate或者直接使用底層的PlatformTransactionManager。對於編程式事務管理,spring推薦使用TransactionTemplate。orm

  聲明式事務管理創建在AOP之上的。其本質是對方法先後進行攔截,而後在目標方法開始以前建立或者加入一個事務,在執行完目標方法以後根據執行狀況提交或者回滾事務。xml

  聲明式事務管理也有兩種經常使用的方式,一種是基於tx和aop名字空間的xml配置文件,另外一種就是基於@Transactional註解。顯然基於註解的方式更簡單易用,更清爽。htm

 

使用說明

看成用於類上時,該類的全部 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 不會致使事務回滾的異常類名字數組

 

https://www.cnblogs.com/clwydjgs/p/9317849.html

相關文章
相關標籤/搜索