Spring主动触发事务回滚

前言:

Spring的事务回滚采用@Transactional,当方法中抛出异常时,会触发事务回滚。

如果没有异常,根据业务逻辑,想要主动触发事务回滚,要怎么实现呢?例如,调用一个第三方接口,如果返回值不是200,就要触发事务回滚。这期间并没有代码错误而抛出异常,只是根据接口的返回值来判断是否回滚。

方法一:

throw new RuntimeException(); 

方法二:

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

实测:数据库中没有新增数据

    @Test
    @Transactional
    public void contextLoads3() throws Exception{
        //创建对象
        Game g1 = new Game();
        g1.setName("test");
        g1.setPicUrl("111");
        g1.setType(1);
        //新增到数据库
        gameRepository.save(g1);
        if(true){
            //throw new RuntimeException();//主动抛出异常
            //TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//调用事务回滚的方法
        }
    }
原文地址:https://www.cnblogs.com/Neonuu/p/14658871.html