最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring在service層的方法報(bào)錯(cuò)事務(wù)不會(huì)回滾的解決

 更新時(shí)間:2022年02月26日 11:43:28   作者:羅小樹  
這篇文章主要介紹了spring在service層的方法報(bào)錯(cuò)事務(wù)不會(huì)回滾的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

spring在service層方法報(bào)錯(cuò)事務(wù)不會(huì)回滾

@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方法時(shí),business3中的代碼執(zhí)行出錯(cuò)了,business1和business2中的操作都沒有回滾

解決方法

方法一:在service方法中捕獲異常,同時(shí)向外拋出運(yùn)行時(shí)異常

@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方法中捕獲異常,同時(shí)手動(dòng)回滾事務(wù)

service手動(dòng)回滾問題

如果對(duì)spring配置了service層事物的管理。

在一些業(yè)務(wù)中需要回滾,正常來說拋出一個(gè)運(yùn)行時(shí)異常即可

throw new RuntimeException();

只是這樣的話代碼就結(jié)束了,如果要返回給用戶錯(cuò)誤信息,不太方便,這時(shí)可以添加如下代碼,在catch中手動(dòng)回滾

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

這樣既能正常返回錯(cuò)誤信息,而又保持了事物的原子性。 

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

科技| 宝清县| 阿荣旗| 巨野县| 富源县| 子长县| 五常市| 泰州市| 永春县| 普陀区| 河津市| 大城县| 桑日县| 云龙县| 揭阳市| 那坡县| 司法| 正宁县| 河西区| 沿河| 綦江县| 嘉祥县| 东光县| 柳林县| 汝阳县| 黔东| 宿州市| 临安市| 子洲县| 云南省| 吉安县| 四川省| 古浪县| 盐边县| 玉树县| 桦甸市| 浪卡子县| 陈巴尔虎旗| 永靖县| 天祝| 大丰市|