最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring事務(wù)異常回滾實例解析

 更新時間:2018年01月04日 10:49:21   作者:Leesire  
這篇文章主要介紹了spring事務(wù)異常回滾實例解析,具有一定借鑒價值,需要的朋友可以參考下

最近遇到了事務(wù)不回滾的情況,我還考慮說JPA的事務(wù)有bug?我想多了.......

為了打印清楚日志,很多方法我都加tyrcatch,在catch中打印日志。但是這邊情況來了,當這個方法異常時候日志是打印了,但是加的事務(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ù)機制不明白。!!

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

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

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

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

解決方案:

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

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

總結(jié)

以上就是本文關(guān)于spring事務(wù)異?;貪L實例解析的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關(guān)文章

最新評論

郧西县| 合阳县| 敦化市| 固镇县| 平安县| 桦甸市| 云浮市| 彭阳县| 和林格尔县| 广昌县| 罗江县| 长兴县| 福海县| 中超| 禹州市| 防城港市| 克东县| 屏边| 沙雅县| 南京市| 两当县| 阿鲁科尔沁旗| 榆中县| 天祝| 甘洛县| 内丘县| 双辽市| 静宁县| 棋牌| 嘉定区| 宣化县| 宜川县| 湛江市| 比如县| 辽宁省| 定襄县| 芮城县| 吴旗县| 和田县| 平湖市| 青龙|