中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

山阴县| 锦州市| 麦盖提县| 汉川市| 永州市| 兰溪市| 东台市| 莫力| 济阳县| 莎车县| 高淳县| 个旧市| 天长市| 潼南县| 磴口县| 阿城市| 泰和县| 分宜县| 衡阳县| 漯河市| 渭南市| 云南省| 安阳县| 定安县| 安国市| 永仁县| 江孜县| 尤溪县| 隆尧县| 澄江县| 东兰县| 南皮县| 宣威市| 怀远县| 临城县| 梅州市| 乌鲁木齐县| 石门县| 汉阴县| 化德县| 休宁县|