spring在service層的方法報錯事務(wù)不會回滾的解決
spring在service層方法報錯事務(wù)不會回滾
@Transactional(rollbackFor = {Exception.class})
public void insertData() throws Exception {
?? ?// 業(yè)務(wù)代碼1
?? ?business1();
?? ?
?? ?// 業(yè)務(wù)代碼2
?? ?business2();
?? ?
?? ?// 業(yè)務(wù)代碼3
?? ?business3();
}
?
public void business1() {
?? ?// 此處省略業(yè)務(wù)操作
}
?
public void business2() {
?? ?// 此處省略業(yè)務(wù)操作
}
?
public void business3() {
?? ?// 此處省略業(yè)務(wù)操作
}以上代碼在service層執(zhí)行insertData方法時,business3中的代碼執(zhí)行出錯了,business1和business2中的操作都沒有回滾
解決方法
方法一:在service方法中捕獲異常,同時向外拋出運(yùn)行時異常
@Transactional(rollbackFor = {Exception.class})
public void insertData() throws Exception {
?? ?try {
?? ??? ?// 業(yè)務(wù)代碼1
?? ??? ?business1();
?? ??? ?
?? ??? ?// 業(yè)務(wù)代碼2
?? ??? ?business2();
?? ??? ?
?? ??? ?// 業(yè)務(wù)代碼3
?? ??? ?business3();
?? ?} catch(Exception e) {
?? ??? ?throw new RuntimeException(e);
?? ?}
}方法二:在service方法中捕獲異常,同時手動回滾事務(wù)
service手動回滾問題
如果對spring配置了service層事物的管理。
在一些業(yè)務(wù)中需要回滾,正常來說拋出一個運(yùn)行時異常即可
throw new RuntimeException();
只是這樣的話代碼就結(jié)束了,如果要返回給用戶錯誤信息,不太方便,這時可以添加如下代碼,在catch中手動回滾
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
這樣既能正常返回錯誤信息,而又保持了事物的原子性。
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
spring中Mapstruct屬性映射的實(shí)現(xiàn)
本文主要介紹了spring中Mapstruct屬性映射的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-12-12
解決啟用 Spring-Cloud-OpenFeign 配置可刷新項(xiàng)目無法啟動的問題
這篇文章主要介紹了解決啟用 Spring-Cloud-OpenFeign 配置可刷新項(xiàng)目無法啟動的問題,本文重點(diǎn)給大家介紹Spring-Cloud-OpenFeign的原理及問題解決方法,需要的朋友可以參考下2021-10-10
Java 關(guān)鍵字 volatile 的理解與正確使用
本文主要介紹 volatile 的使用準(zhǔn)則,以及使用過程中需注意的地方,感興趣的朋友一起看看吧2017-06-06
Java基礎(chǔ)之toString的序列化 匿名對象 復(fù)雜度精解
序列化即為把內(nèi)存中的對象轉(zhuǎn)換為字節(jié)寫入文件或通過網(wǎng)絡(luò)傳輸?shù)竭h(yuǎn)端服務(wù)器,本章節(jié)將帶你了解Java toString的序列化 匿名對象 復(fù)雜度,需要的朋友可以參考下2021-09-09
深入Synchronized和java.util.concurrent.locks.Lock的區(qū)別詳解
本篇文章是對Synchronized和java.util.concurrent.locks.Lock的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
快速上手Mybatis-plus結(jié)構(gòu)構(gòu)建過程
這篇文章主要介紹了快速上手Mybatis-plus結(jié)構(gòu)構(gòu)建過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07
Java 如何從list中刪除符合條件的數(shù)據(jù)
這篇文章主要介紹了Java 如何從list中刪除符合條件的數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11

