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();
            
        }
原文地址:https://www.cnblogs.com/soul-wonder/p/9799041.html