spring日誌回滾方法
阿新 • • 發佈:2018-12-20
在使用spring中,配置了事務,並且在service方法上添加了@Transactional但是當程式出錯時並不能回滾,分析原因發現,預設spring事務只在發生未被捕獲的 runtimeexcetpion時才回滾。
spring aop 異常捕獲原理:被攔截的方法需顯式丟擲異常,並不能經任何處理,這樣aop代理才能捕獲到方法的異常,才能進行回滾,預設情況下aop只捕獲runtimeexception的異常,但可以通過配置來捕獲特定的異常並回滾,換句話說在service的方法中使用try catch 或者在catch中最後加上throw new runtimeexcetpion(),這樣程式異常時才能被aop捕獲進而回滾。
解決辦法:
方案1
if(userSave){ try { userDao.save(user); userCapabilityQuotaDao.save(capabilityQuota); } catch (Exception e) { logger.info("能力開通介面,開戶異常,異常資訊:"+e); throw new RuntimeException(); } }
方案2.在service層方法的catch語句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();語句,手動回滾,這樣上層就無需去處理異常(現在專案的做法)
if(userSave){ try { userDao.save(user); userCapabilityQuotaDao.save(capabilityQuota); } catch (Exception e) { logger.info("能力開通介面,開戶異常,異常資訊:"+e); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } }
如果你剛好是程式設計師,如果你剛好又是Java程式設計師,如果剛好你的技術又遇到了瓶頸但是你又拒絕平庸,期待蛻變,想進入一線網際網路公司或者給自己漲薪
我這裡剛好有一套自己儲存的Java進階學習資料。包含了Spring框架、Mybatis框架SpringBoot框架、SpringMVC框架、SpringCloud微服務、Dubbo框架、Redis快取、RabbitMq訊息、JVM調優、Tomcat容器、MySQL資料庫
之前的兩千人群滿了 這個是新群Java高階進階群:963,,,944…895,免費傳送的喲