我有一个@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)
。但它会超过性能。
答案 0 :(得分:0)
如果您不希望在methodOne
发生异常后从methodTwo
回滚您的交易,则可以使用methodOne
添加注释@Transactional(noRollbackFor = {RuntimeException.class})
。但是请注意,这有点滑,如果你真的想这样做,请三思而后行。