如果我有一个方法,对于某个异常有 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);
}
这里实际上会发生什么?
最佳答案
每次都会创建新的交易。 它与从 spring 上下文获取服务并调用方法 N 次相同。每次调用都会创建新事务(使用您添加到服务或方法中的传播)。调用您的事务服务方法,调用它的代理,也重试调用该代理。另外,您的交易可能会超时,请在新的超时时间内重试尝试调用,而不是一次超时尝试 N 次
关于java - Spring新事务与Retryable相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49027968/