Spring @Transactional 添加 rollbackFor 屬性


 

Java 的異常類圖結構

 

 

兩種異常的分類方式:

第一種:運行時異常(RuntimeException)、非運行時異常 (Exception 下除了RuntimeException及其子類的其他異常)
第二種:受檢異常(非運行時異常)、非受檢異常(RuntimeException和Error)
 

Spring @Transactional 注解的作用

@Transactional 是Spring框架的事務管理,作用是如果業務對數據庫操作出現異常的情況下可以回滾數據庫操作。
Spring框架的事務管理默認是只在發生不受控異常(RuntimeException和Error)時才進行事務回滾。
實際上是Spring 會把Error 轉化成 RuntimeException 從而進行事務回滾。
當業務操作中發生了受檢異常(即Exception 下除了RuntimeException及其子類的其他異常)時不會進行事務回滾。
 

rollbackFor 屬性介紹

在實際開發中我們是希望發生任何異常都要發生回滾操作,即在發生受檢異常的情況下也要進行事務回滾,默認情況下@Transactional 的不足:在發生受檢異常時(Exception 下除了RuntimeException及其子類的其他異常)不會回滾。
解決辦法:在@Transactional 注解中增加 rollbackFor 設置rollbackFor 屬性值。
即: @Transactional(rollbackFor = Exception.class)
 
 
 

 @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
不會導致事務回滾的異常類名字數組
 
 
 
 
 
 
 
 
 
 
 
 
 


免責聲明!

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



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