java - Spring新事务与Retryable相结合

标签 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);
}

这里实际上会发生什么?

最佳答案

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

关于java - Spring新事务与Retryable相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49027968/

相关文章:

java - 如何在Android项目中使用docxj4

java - 保护源代码的各个部分

java - JtaTransactionManager 在 "flush"期间提交失败后没有回滚

java - 部署到tomcat时出错

java - Spring HATEOAS/Jackson 与资源和资源组装器

spring - "LinkageError--> loader ' 应用程序 ' attempted duplicate class definition"将类标记为 @Transactional 后

java - Swing + Spring + @Transactional = 不启动事务

java - 如何设置 commons-logging 以使用 logback?

java - 使用方法将 ArrayList 复制到文本文件

spring - 为什么首页无法访问/spring boot应用