spring如何實現(xiàn)事務(wù)異?;貪L-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)spring如何實現(xiàn)事務(wù)異?;貪L,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

成都創(chuàng)新互聯(lián)服務(wù)項目包括洛南網(wǎng)站建設(shè)、洛南網(wǎng)站制作、洛南網(wǎng)頁制作以及洛南網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,洛南網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到洛南省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

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

例:

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

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的事務(wù)機制不明白。?。?/p>

*****默認(rèn)spring事務(wù)只在發(fā)生未被捕獲的runtimeexcetpion時才回滾。******

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

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

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

解決方案:

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

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

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

分享題目:spring如何實現(xiàn)事務(wù)異?;貪L-創(chuàng)新互聯(lián)
轉(zhuǎn)載注明:http://muchs.cn/article2/cessic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、品牌網(wǎng)站建設(shè)、手機網(wǎng)站建設(shè)標(biāo)簽優(yōu)化、搜索引擎優(yōu)化、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)