4

我有一个@Service类,它有一个在另一个服务上@Transactional调用另一个方法的方法。@Transactional像这样的东西:

@Service
public class AService {
  @Autowired
  BService b;
  @Autowired
  ARepository aRepo;

  @Transactional
  public void methodOne(){
    try{
      b.methodTwo();
    }catch(RuntimeException e){}
    aRepo.save(new A());
  }

} 

@Service
public class BService{

    @Transactional
    public void methodTwo(){
      if(true)
        throw new RuntimeException();
    }

}

我希望 A 实体将被插入,但如果任何嵌套事务抛出异常插入将拒绝,即使此异常在AService.methodOne().

我可以methodTwo()@Transactional(propagation = Propagation.REQUIRES_NEW). 但它会打败性能。

4

1 回答 1

1

如果您不想在 中发生某些异常后回滚您的事务,methodOnemethodTwo可以添加注释methodOne@Transactional(noRollbackFor = {RuntimeException.class})但请注意,这有点滑坡,如果您真的想这样做,请三思而后行。

于 2018-01-26T13:44:34.333 回答