成都网站建设设计

将想法与焦点和您一起共享

如何解决Spring异常捕获且回滚事务

这篇文章主要为大家展示了如何解决Spring异常捕获且回滚事务,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。

成都创新互联公司长期为1000多家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为丰宁企业提供专业的做网站、成都网站制作丰宁网站改版等技术服务。拥有十年丰富建站经验和众多成功案例,为您定制开发。

默认spring只在发生未被捕获的runtimeexcetpion时才回滚。

最笨的办法:代码级控制:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

为何在aop advitor中配置rollba-for=“java.lang.Exception”异常时不回滚呢?

问题已解决:

原理:spring aop 异常捕获原理:被拦截的方法需显式抛出异常,并不能经任何处理,这样aop代理才能捕获到方法的异常,才能进行回滚,默认情况下aop只捕获runtimeexception的异常,但可以通过

配置来捕获特定的异常并回滚

换句话说在service的方法中不使用try catch 或者在catch中最后加上throw new runtimeexcetpion(),这样程序异常时才能被aop捕获进而回滚

解决方案:

方案1.例如service层处理事务,那么service中的方法中不做异常捕获,或者在catch语句中最后增加throw new RuntimeException()语句,以便让aop捕获异常再去回滚,并且在service上层(webservice客户端,view层action)要继续捕获这个异常并处理

方案2.在service层方法的catch语句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();语句,手动回滚,这样上层就无需去处理异常(现在项目的做法)


 



 
  
  
  
  
 



 
 

以上就是关于如何解决Spring异常捕获且回滚事务的内容,如果你们有学习到知识或者技能,可以把它分享出去让更多的人看到。


本文题目:如何解决Spring异常捕获且回滚事务
标题链接:http://chengdu.cdxwcx.cn/article/iiggse.html