【问题标题】:Spring new transaction combined with RetryableSpring新事务结合Retryable
【发布时间】:2018-08-08 05:44:05
【问题描述】:

如果我有一个方法对某个异常有一个 Spring 可重试,并且也有一个 Transactional(Requires_new),那么每次重试完成时,它会创建一个新事务还是使用现有事务?

@Retryable(maxAttempts = 5, backoff = @Backoff(delay = 250), include = {ActivitiOptimisticLockingException.class})
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void setVariable(String processId, String variableName, String variableValue){
    engine.getRuntimeService().setVariable(processId, variableName, variableValue);
}

这里实际会发生什么?

【问题讨论】:

标签: java spring spring-transactions activiti spring-retry


【解决方案1】:

每次都会创建新的事务。 它与从 spring 上下文获取服务并调用方法 N 次相同。每次调用都会创建新事务(使用您添加到服务或方法中的传播)。调用您的事务处理方法调用它调用代理,也重试调用该代理。此外,您的事务可能有超时,请在新的超时时间内重试调用,而不是一次超时 N 次尝试

【讨论】:

  • 其实要看拦截器注册的顺序。
  • 同意。默认顺序是这样
猜你喜欢
  • 2017-12-03
  • 2021-12-30
  • 2018-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-29
  • 2022-12-19
相关资源
最近更新 更多