抛出自定义异常,spring AOP事务不回滚的解决方案

Spring AOP 默认对RuntimeException()异常或是其子类进行事务回滚,也就是说


事务回滚:throw new RuntimeException("xxxxxxxxxxxx"); 

事物回滚:throw new Exception("xxxxxxxxxxxx"); 


那么,如何在抛出Exception或者自定义异常时,事务也进行回滚呢?有以下几种方案:


1、在捕获到异常或者显示的抛出 RuntimeException

2、手动回滚----在捕获到异常或者显示的抛出自定义异常前,加一段代码:

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

3、在AOP的配置文件中,添加如下信息:

      这样,在抛出自定义异常时,就会进行事务的回滚了


小结:

方法1:在做测试时比较方便,放在业务中无法区分具体的错误信息

方法2:在个别业务处理或者调试代码时使用放在代码中不方便维护,每个异常都需要增加。

方法3:适合业务开发,也符合AOP的理念。将事务控制和业务分离

你可能感兴趣的:(java,spring)