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();//调用事务回滚的方法
        }
    }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM