spring事物回滚遇到的问题

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

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

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

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