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