這篇文章將為大家詳細(xì)講解有關(guān)spring如何實(shí)現(xiàn)事務(wù)異?;貪L,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
為了打印清楚日志,很多方法我都加tyrcatch,在catch中打印日志。但是這邊情況來(lái)了,當(dāng)這個(gè)方法異常時(shí)候日志是打印了,但是加的事務(wù)卻沒(méi)有回滾。
例:
類(lèi)似這樣的方法不會(huì)回滾(一個(gè)方法出錯(cuò),另一個(gè)方法不會(huì)回滾):
if(userSave){ try { userDao.save(user); userCapabilityQuotaDao.save(capabilityQuota); } catch (Exception e) { logger.info("能力開(kāi)通接口,開(kāi)戶異常,異常信息:"+e); } }
下面的方法回滾(一個(gè)方法出錯(cuò),另一個(gè)方法會(huì)回滾):
if(userSave){ try { userDao.save(user); userCapabilityQuotaDao.save(capabilityQuota); } catch (Exception e) { logger.info("能力開(kāi)通接口,開(kāi)戶異常,異常信息:"+e); throw new RuntimeException(); } }
或者:
if(userSave){ try { userDao.save(user); userCapabilityQuotaDao.save(capabilityQuota); } catch (Exception e) { logger.info("能力開(kāi)通接口,開(kāi)戶異常,異常信息:"+e); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } }
為什么不會(huì)滾呢??是對(duì)spring的事務(wù)機(jī)制不明白。?。?/p>
*****默認(rèn)spring事務(wù)只在發(fā)生未被捕獲的runtimeexcetpion時(shí)才回滾。******
springaop異常捕獲原理:被攔截的方法需顯式拋出異常,并不能經(jīng)任何處理,這樣aop代理才能捕獲到方法的異常,才能進(jìn)行回滾,默認(rèn)情況下aop只捕獲runtimeexception的異常,但可以通過(guò)。
配置來(lái)捕獲特定的異常并回滾
換句話說(shuō)在service的方法中不使用trycatch或者在catch中最后加上thrownewruntimeexcetpion(),這樣程序異常時(shí)才能被aop捕獲進(jìn)而回滾
解決方案:
方案1.例如service層處理事務(wù),那么service中的方法中不做異常捕獲,或者在catch語(yǔ)句中最后增加thrownewRuntimeException()語(yǔ)句,以便讓aop捕獲異常再去回滾,并且在service上層(webservice客戶端,view層action)要繼續(xù)捕獲這個(gè)異常并處理
方案2.在service層方法的catch語(yǔ)句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();語(yǔ)句,手動(dòng)回滾,這樣上層就無(wú)需去處理異常(現(xiàn)在項(xiàng)目的做法)
關(guān)于“spring如何實(shí)現(xiàn)事務(wù)異?;貪L”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
分享題目:spring如何實(shí)現(xiàn)事務(wù)異?;貪L-創(chuàng)新互聯(lián)
轉(zhuǎn)載注明:http://jinyejixie.com/article2/cessic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開(kāi)發(fā)、品牌網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化、搜索引擎優(yōu)化、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容