java - 处理异常后Spring嵌套事务​​回滚

标签 java spring transactions nested-transactions

我有一个 @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();
    }

}

我希望将插入一个实体,但是如果任何嵌套事务抛出异常,即使在 AService.methodOne() 处处理了此异常,插入也会拒绝.

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

最佳答案

如果您不想从 methodOne 回滚您的交易在 methodTwo 发生一些异常之后, 您可以添加注释 methodOne@Transactional(noRollbackFor = {RuntimeException.class}) .但请注意,这有点滑坡,如果您真的想这样做,请三思。

关于java - 处理异常后Spring嵌套事务​​回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48462191/

相关文章:

mysql - MySQL 中的作用域/复合代理键

PHP MySQL 事务捕获错误

服务层的Spring事务管理

jvm - 为什么 java/lang/System 中的 nullPrintStream() 函数将 currentTimeMillis() 与零进行比较?

c# - 我们可以在.Net中使用基于JAVA的drools规则吗

java - 项目 euler 23(循环)出现问题

java - 如何设置 spring 注入(inject) null 而不是为所有 @Autowired 注释抛出异常?

java - Spring MVC 和 Thymeleaf Button 禁用更新

java - 使用 Fongo 覆盖 Spring Mongo 配置

java - 安卓政策 : External application files