3

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

IE

@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);
}

这里实际上会发生什么?

4

1 回答 1

3

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

于 2017-06-22T09:38:23.017 回答