SpringBoot事務(wù)使用及回滾實(shí)現(xiàn)代碼詳解
Springboot中事務(wù)的使用:
1、啟動(dòng)類加上@EnableTransactionManagement注解,開啟事務(wù)支持(其實(shí)默認(rèn)是開啟的)。
2、在使用事務(wù)的public(只有public支持事務(wù))方法(或者類-相當(dāng)于該類的所有public方法都使用)加上@Transactional注解。
在實(shí)際使用中一般是在service中使用@Transactional,那么對(duì)于controller->service流程中:
如果controller未開啟事務(wù),service中開始了事務(wù),service成功執(zhí)行,controller在之后的運(yùn)行中出現(xiàn)異常(錯(cuò)誤),不會(huì)自動(dòng)回滾。
也就是說,只有在開啟事務(wù)的方法中出現(xiàn)異常(默認(rèn)只有非檢測(cè)性異常才生效-RuntimeException )(錯(cuò)誤-Error)才會(huì)自動(dòng)回滾。
如果想要對(duì)拋出的任何異常都進(jìn)行自動(dòng)回滾(而不是只針對(duì)RuntimeException),只需要在使用@Transactional(rollbackFor = Exception.class)即可。
開啟事務(wù)的方法中事務(wù)回滾的情況:
①未發(fā)現(xiàn)的異常,程序運(yùn)行過程中自動(dòng)拋出RuntimeException或者其子類,程序終止,自動(dòng)回滾。
②使用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();進(jìn)行手動(dòng)回滾。
③注意:如果在try-catch語句中對(duì)可能出現(xiàn)的異常(RuntimeException)進(jìn)行了處理,沒有再手動(dòng)throw異常,spring認(rèn)為該方法成功執(zhí)行,不會(huì)進(jìn)行回滾,此時(shí)需要調(diào)用②中方法進(jìn)行手動(dòng)回滾,如下圖:
另外,如果try-catch語句在finally中進(jìn)行了return操作,那么catch中手動(dòng)拋出的異常也會(huì)被覆蓋,同樣不會(huì)自動(dòng)回滾。

//不會(huì)自動(dòng)回滾
try{
throw new RuntimeException();
}catch(RuntimeException e){
e.printStackTrace();
}finally{
}
//會(huì)自動(dòng)回滾
try{
throw new RuntimeException();
}catch(RuntimeException e){
e.printStackTrace();
throw new RuntimeException();
}finally{
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java8中 LocalDate和java.sql.Date的相互轉(zhuǎn)換操作
這篇文章主要介紹了Java8中 LocalDate和java.sql.Date的相互轉(zhuǎn)換操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-12-12
Spring Boot 配置MySQL數(shù)據(jù)庫重連的操作方法
這篇文章主要介紹了Spring Boot 配置MySQL數(shù)據(jù)庫重連的操作方法,需要的朋友可以參考下2018-04-04
如何通過Maven倉(cāng)庫安裝Spire系列的Java產(chǎn)品
這篇文章主要介紹了如何通過Maven倉(cāng)庫安裝Spire系列的Java產(chǎn)品,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
使用注解@Validated和BindingResult對(duì)入?yún)⑦M(jìn)行非空校驗(yàn)方式
這篇文章主要介紹了使用注解@Validated和BindingResult對(duì)入?yún)⑦M(jìn)行非空校驗(yàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
Java通過PowerMockito和Mokito進(jìn)行單元測(cè)試的實(shí)現(xiàn)
PowerMockito和Mockito都是Java語言中的測(cè)試框架,用于進(jìn)行單元測(cè)試和集成測(cè)試,本文就來詳細(xì)的介紹一下通過PowerMockito和Mokito進(jìn)行單元測(cè)試,感興趣的可以了解一下2023-08-08
SpringBoot打印系統(tǒng)執(zhí)行的sql語句及日志配置指南
這篇文章主要給大家介紹了關(guān)于SpringBoot打印系統(tǒng)執(zhí)行的sql語句及日志配置的相關(guān)資料,在Java SpringBoot項(xiàng)目中如果使用了Mybatis框架,默認(rèn)情況下執(zhí)行的所有SQL操作都不會(huì)打印日志,需要的朋友可以參考下2023-10-10
Mybatis之a(chǎn)ssociation和collection用法
這篇文章主要介紹了Mybatis之a(chǎn)ssociation和collection用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
Jmeter多臺(tái)機(jī)器并發(fā)請(qǐng)求實(shí)現(xiàn)壓力性能測(cè)試
這篇文章主要介紹了Jmeter多臺(tái)機(jī)器并發(fā)請(qǐng)求實(shí)現(xiàn)壓力性能測(cè)試,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10

