亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

spring如何實現事務異常回滾

發布時間:2021-08-05 14:53:11 來源:億速云 閱讀:170 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關spring如何實現事務異常回滾,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

為了打印清楚日志,很多方法我都加tyrcatch,在catch中打印日志。但是這邊情況來了,當這個方法異常時候日志是打印了,但是加的事務卻沒有回滾。

例:

類似這樣的方法不會回滾(一個方法出錯,另一個方法不會回滾):

if(userSave){     
  try {     
    userDao.save(user);     
    userCapabilityQuotaDao.save(capabilityQuota);     
   } catch (Exception e) {     
    logger.info("能力開通接口,開戶異常,異常信息:"+e);     
   }     
 }

下面的方法回滾(一個方法出錯,另一個方法會回滾):

if(userSave){     
   try {     
    userDao.save(user);     
    userCapabilityQuotaDao.save(capabilityQuota);     
    } catch (Exception e) {     
    logger.info("能力開通接口,開戶異常,異常信息:"+e);     
    throw new RuntimeException();     
   }     
}

或者:

if(userSave){     
  try {     
    userDao.save(user);     
    userCapabilityQuotaDao.save(capabilityQuota);     
  } catch (Exception e) {     
    logger.info("能力開通接口,開戶異常,異常信息:"+e);     
    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();     
  }     
 }

為什么不會滾呢??是對spring的事務機制不明白。!!

*****默認spring事務只在發生未被捕獲的runtimeexcetpion時才回滾。******

springaop異常捕獲原理:被攔截的方法需顯式拋出異常,并不能經任何處理,這樣aop代理才能捕獲到方法的異常,才能進行回滾,默認情況下aop只捕獲runtimeexception的異常,但可以通過。

配置來捕獲特定的異常并回滾

換句話說在service的方法中不使用trycatch或者在catch中最后加上thrownewruntimeexcetpion(),這樣程序異常時才能被aop捕獲進而回滾

解決方案:

方案1.例如service層處理事務,那么service中的方法中不做異常捕獲,或者在catch語句中最后增加thrownewRuntimeException()語句,以便讓aop捕獲異常再去回滾,并且在service上層(webservice客戶端,view層action)要繼續捕獲這個異常并處理

方案2.在service層方法的catch語句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();語句,手動回滾,這樣上層就無需去處理異常(現在項目的做法)

關于“spring如何實現事務異常回滾”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

甘南县| 温州市| 阿合奇县| 和顺县| 卓尼县| 岗巴县| 山阴县| 襄城县| 姜堰市| 喜德县| 永清县| 金门县| 德庆县| 尼勒克县| 包头市| 鄂托克旗| 南江县| 玉溪市| 巩义市| 会昌县| 封丘县| 六安市| 平昌县| 扬中市| 阿瓦提县| 苗栗县| 得荣县| 钟山县| 离岛区| 化隆| 海林市| 吉安县| 五大连池市| 长垣县| 栾城县| 沐川县| 香河县| 抚松县| 定安县| 永和县| 阳朔县|