使用 Spring Retry,是否可以将退避值作为函数参数传递?

With Spring Retry, is it possible to pass the backoff value as a function parameter?

目前我正在使用以下注释来控制退避和重试参数。

@Retryable(value = { RemoteCallException.class },
            maxAttemptsExpression = "{@Properties.getRetries()}",
            backoff = @Backoff(delayExpression = "{@Properties.getBackoff()}"))

但是,我的代码中有很多不同的 Rest 调用,我希望函数调用者能够在运行时指定退避,而不是被限制在初始化时指定。这可能吗?我试图避免在 @Recover 函数中使用 sleep 语句,因为我想使用内置于 Spring Retry API.

中的回退

目前不可能;表达式仅在初始化期间计算一次。

很巧,我前几天为此开了一个new feature request

您可以使用自定义重试策略连接到自定义拦截器并通过 interceptor 属性.

传入 @Retry

请参阅我的 SO answer linked in that issue 了解有关如何执行此操作的更多详细信息。