Spring中@Transactional(rollbackFor=Exception.class)屬性用法介紹
序言
今天我在寫(xiě)代碼的時(shí)候,看到了。一個(gè)注解@Transactional(rollbackFor = Exception.class),今天就和大家分享一下,這個(gè)注解的用法;

異常
如下圖所示,我們都知道Exception分為運(yùn)行時(shí)異常RuntimeException和非運(yùn)行時(shí)異常
error是一定會(huì)回滾的

如果不對(duì)運(yùn)行時(shí)異常進(jìn)行處理,那么出現(xiàn)運(yùn)行時(shí)異常之后,要么是線程中止,要么是主程序終止。
如果不想終止,則必須捕獲所有的運(yùn)行時(shí)異常,決不讓這個(gè)處理線程退出。隊(duì)列里面出現(xiàn)異常數(shù)據(jù)了,正常的處理應(yīng)該是把異常數(shù)據(jù)舍棄,然后記錄日志。不應(yīng)該由于異常數(shù)據(jù)而影響下面對(duì)正常數(shù)據(jù)的處理。
非運(yùn)行時(shí)異常是RuntimeException以外的異常,類型上都屬于Exception類及其子類。如IOException、SQLException等以及用戶自定義的Exception異常。對(duì)于這種異常,JAVA編譯器強(qiáng)制要求我們必需對(duì)出現(xiàn)的這些異常進(jìn)行catch并處理,否則程序就不能編譯通過(guò)。所以,面對(duì)這種異常不管我們是否愿意,只能自己去寫(xiě)一大堆catch塊去處理可能的異常。
事務(wù)管理方式
事務(wù)管理對(duì)于企業(yè)應(yīng)用來(lái)說(shuō)是至關(guān)重要的,即使出現(xiàn)異常情況,它也可以保證數(shù)據(jù)的一致性。
spring支持編程式事務(wù)管理和聲明式事務(wù)管理兩種方式。
- 編程式事務(wù)管理使用TransactionTemplate或者直接使用底層的PlatformTransactionManager。對(duì)于編程式事務(wù)管理,spring推薦使用TransactionTemplate。
- 聲明式事務(wù)管理建立在AOP之上的。其本質(zhì)是對(duì)方法前后進(jìn)行攔截,然后在目標(biāo)方法開(kāi)始之前創(chuàng)建或者加入一個(gè)事務(wù),在執(zhí)行完目標(biāo)方法之后根據(jù)執(zhí)行情況提交或者回滾事務(wù)。
- 聲明式事務(wù)管理也有兩種常用的方式,一種是基于tx和aop名字空間的xml配置文件,另一種就是基于@Transactional注解。顯然基于注解的方式更簡(jiǎn)單易用,更清爽。
使用說(shuō)明
當(dāng)作用于類上時(shí),該類的所有 public 方法將都具有該類型的事務(wù)屬性,同時(shí),我們也可以在方法級(jí)別使用該標(biāo)注來(lái)覆蓋類級(jí)別的定義。
在項(xiàng)目中,@Transactional(rollbackFor=Exception.class),如果類加了這個(gè)注解,那么這個(gè)類里面的方法拋出異常,就會(huì)回滾,數(shù)據(jù)庫(kù)里面的數(shù)據(jù)也會(huì)回滾。
在@Transactional注解中如果不配置rollbackFor屬性,那么事物只會(huì)在遇到RuntimeException的時(shí)候才會(huì)回滾,加上rollbackFor=Exception.class,可以讓事物在遇到非運(yùn)行時(shí)異常時(shí)也回滾
@Transactional注解的全部屬性詳解
@Transactional屬性
| 屬性 | 類型 | 描述 |
|---|---|---|
| value | String | 可選的限定描述符,指定使用的事務(wù)管理器 |
| propagation | enum: Propagation | 可選的事務(wù)傳播行為設(shè)置 |
| isolation | enum: Isolation | 可選的事務(wù)隔離級(jí)別設(shè)置 |
| readOnly | boolean | 讀寫(xiě)或只讀事務(wù),默認(rèn)讀寫(xiě) |
| timeout | int (in seconds granularity) | 事務(wù)超時(shí)時(shí)間設(shè)置 |
| rollbackFor | Class對(duì)象數(shù)組,必須繼承自Throwable | 導(dǎo)致事務(wù)回滾的異常類數(shù)組 |
| rollbackForClassName | 類名數(shù)組,必須繼承自Throwable | 導(dǎo)致事務(wù)回滾的異常類名字?jǐn)?shù)組 |
| noRollbackFor | Class對(duì)象數(shù)組,必須繼承自Throwable | 不會(huì)導(dǎo)致事務(wù)回滾的異常類數(shù)組 |
| noRollbackForClassName | 類名數(shù)組,必須繼承自Throwable | 不會(huì)導(dǎo)致事務(wù)回滾的異常類名字?jǐn)?shù)組 |
到此這篇關(guān)于Spring中@Transactional(rollbackFor=Exception.class)屬性用法介紹的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringCloud?Function?SpEL注入漏洞分析及環(huán)境搭建
SpringCloud 是一套分布式系統(tǒng)的解決方案,常見(jiàn)的還有阿里巴巴的Dubbo,F(xiàn)ass的底層實(shí)現(xiàn)就是函數(shù)式編程,SpringCloud Function 就是Spring提供的分布式函數(shù)式編程組件,下面給大家介紹下SpringCloud?Function?SpEL注入漏洞分析,感興趣的朋友一起看看吧2022-04-04
Java實(shí)現(xiàn)圖書(shū)管理系統(tǒng)的示例代碼
這篇文章將通過(guò)Java實(shí)現(xiàn)一個(gè)簡(jiǎn)答的圖書(shū)管理系統(tǒng),本圖書(shū)管理系統(tǒng)用對(duì)象數(shù)組的方式來(lái)提供操作方法,比較特別,建議新手學(xué)習(xí),這對(duì)理解Java面向?qū)ο笥泻艽髱椭?/div> 2022-11-11
如何利用NetworkInterface獲取服務(wù)器MAC地址
今天介紹一種通用的跨平臺(tái)的操作方式,那就是JDK自帶的NetworkInterface接口,該接口在JDK1.4已經(jīng)出現(xiàn),但是功能比較少,JDK1.6之后新增了不少新功能,比較不錯(cuò)2013-08-08
解析Idea為什么不推薦使用@Autowired進(jìn)行Field注入
這篇文章主要介紹了Idea不推薦使用@Autowired進(jìn)行Field注入的原因,網(wǎng)上文章大部分都是介紹兩者的區(qū)別,沒(méi)有提到為什么,當(dāng)時(shí)想了好久想出了可能的原因,今天來(lái)總結(jié)一下2022-05-05
Javaweb實(shí)現(xiàn)在線人數(shù)統(tǒng)計(jì)代碼實(shí)例
這篇文章主要介紹了Javaweb實(shí)現(xiàn)在線人數(shù)統(tǒng)計(jì)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
測(cè)量Java對(duì)象所占內(nèi)存大小方式
這篇文章主要介紹了測(cè)量Java對(duì)象所占內(nèi)存大小方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
Mybatis CURD及模糊查詢功能的實(shí)現(xiàn)
這篇文章主要介紹了Mybatis CURD及模糊查詢功能的實(shí)現(xiàn),有查詢刪除,插入,更新功能,通過(guò)實(shí)例代碼講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-06-06
SpringBoot實(shí)現(xiàn)分布式任務(wù)調(diào)度的詳細(xì)步驟
隨著互聯(lián)網(wǎng)應(yīng)用的規(guī)模和復(fù)雜度不斷增加,單節(jié)點(diǎn)任務(wù)調(diào)度系統(tǒng)已經(jīng)難以滿足高并發(fā)、大數(shù)據(jù)量的處理需求,分布式任務(wù)調(diào)度成為了解決這一問(wèn)題的重要手段,本文將介紹如何在Spring Boot中實(shí)現(xiàn)分布式任務(wù)調(diào)度,需要的朋友可以參考下2024-08-08最新評(píng)論

