Spring新事务与Retryable相结合

时间:2017-06-22 08:21:55

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

如果我有一个方法对某个异常有一个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);
}

这里会发生什么?

1 个答案:

答案 0 :(得分:2)

每次都会创建新的事务。 它与从spring上下文获取服务和调用方法N次相同。每次调用都会创建新事务(使用您添加到服务或方法中的传播)。调用你的transactioanl servics方法调用它调用一个代理,重试那个代理的调用。此外,您的交易可能有超时,在新的超时持续时间内重试尝试呼叫,而不是在一次超时中尝试N次