抛出自定义异常,spring AOP事务不回滚的解决方案
2017-05-24 14:02
381 查看
转载地址:http://blog.csdn.net/xueyepiaoling/article/details/50828522
spring AOP 默认对RuntimeException()异常或是其子类进行事务回滚,也就是说
事务回滚:throw new RuntimeException("xxxxxxxxxxxx");
事物不回滚:throw new Exception("xxxxxxxxxxxx");
那么,如何在抛出Exception或者自定义异常时,事务也进行回滚呢?有以下几种方案:
1、在捕获到异常或者显示的抛出 RuntimeException
2、手动回滚----在捕获到异常或者显示的抛出自定义异常前,加一段代码:
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
3、在AOP的配置文件中,添加如下信息:
<tx:method name="add*" propagation="REQUIRED" rollback-for="com.xxx.xxx.xxxException"/>
这样,在抛出自定义异常时,就会进行事务的回滚了
小结:
方法1:在做测试时比较方便,放在业务中无法区分具体的错误信息
方法2:在个别业务处理或者调试代码时使用,放在代码中不方便维护,每个异常都需要增加。
方法3:适合业务开发,也符合AOP的理念。将事务控制和业务分离
spring AOP 默认对RuntimeException()异常或是其子类进行事务回滚,也就是说
事务回滚:throw new RuntimeException("xxxxxxxxxxxx");
事物不回滚:throw new Exception("xxxxxxxxxxxx");
那么,如何在抛出Exception或者自定义异常时,事务也进行回滚呢?有以下几种方案:
1、在捕获到异常或者显示的抛出 RuntimeException
2、手动回滚----在捕获到异常或者显示的抛出自定义异常前,加一段代码:
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
3、在AOP的配置文件中,添加如下信息:
<tx:method name="add*" propagation="REQUIRED" rollback-for="com.xxx.xxx.xxxException"/>
这样,在抛出自定义异常时,就会进行事务的回滚了
小结:
方法1:在做测试时比较方便,放在业务中无法区分具体的错误信息
方法2:在个别业务处理或者调试代码时使用,放在代码中不方便维护,每个异常都需要增加。
方法3:适合业务开发,也符合AOP的理念。将事务控制和业务分离
相关文章推荐
- 抛出自定义异常,spring AOP事务不回滚的解决方案
- 抛出自定义异常,spring AOP事务不回滚的解决方案
- spring异常抛出触发事务回滚策略导读
- Spring事务异常回滚,捕获异常不抛出就不会回滚
- Spring事务异常回滚,捕获异常不抛出就不会回滚
- 异常捕获不抛出,Spring事务无法回滚
- 异常捕获不抛出,Spring事务无法回滚
- Spring事务异常回滚,捕获异常不抛出就不会回滚
- 异常捕获不抛出,Spring事务无法回滚 (默认spring只在发生未被捕获的runtimeexcetpion时才回滚。)
- spring异常抛出触发事务回滚策略导读
- spring拦截自定义异常并回滚当前事务
- Spring的AOP事务管理默认针对unchecked异常回滚
- Spring事务异常回滚,捕获异常不抛出就不会回滚
- try{} catch(Exception e){}异常抛出与Spring事务回滚策略
- spring事务控制的方法中抛出异常不回滚
- 异常捕获不抛出,Spring事务无法回滚
- 异常捕获不抛出,Spring事务无法回滚
- Spring事务异常回滚,捕获异常不抛出就不会回滚
- 通过spring的aop统一拦截Exception抛出自定义异常
- Spring异常抛出触发事务回滚策略