91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

濉溪县| 邯郸县| 卓资县| 邵阳县| 慈利县| 应城市| 河南省| 贵港市| 安仁县| 宁都县| 中阳县| 子洲县| 聊城市| 新河县| 肥城市| 轮台县| 宁都县| 噶尔县| 徐汇区| 陆川县| 平利县| 垣曲县| 闵行区| 兴宁市| 宝兴县| 庆阳市| 台东市| 岐山县| 呈贡县| 遂溪县| 凭祥市| 保靖县| 抚州市| 鄂托克前旗| 宜兰县| 富民县| 清丰县| 古交市| 隆昌县| 阿拉善右旗| 祁连县|