spring事物回滚遇到的问题

在service层使用声明式事务添加@Transactional(rollbackFor = Exception.class)注解

多个方法进行数据库操作,执行失败则隐式的回滚事务,但是已经成功的发方法不会回滚,

想要,所有方法都回滚,需要手动try-catch,进行手动回滚(spring aop  异常捕获原理:被拦截的方法需显式抛出异常,并不能经任何处理,这样aop代理才能捕获到方法的异常,才能进行回滚,默认情况下aop只捕获runtimeexception的异常

try {
            a.save();
            b.save();
        } catch (Exception e) {
            //方式一:aop捕获RuntimeException异常回滚
            throw new RuntimeException();
            //方式二:
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            
        }

 

posted @ 2018-10-16 16:56  灬小乙  阅读(308)  评论(0编辑  收藏  举报