Spring Retry中的增量线性退避

问题描述 投票:1回答:1

我在一个我想重试的方法中使用以下注释:

@Retryable(maxAttempts = 5, backoff = @Backoff(delay = 1000))
private boolean myMethod() {
    ...
}

此重试按预期工作,以及未显示的指数延迟。在某些情况下,我想使用线性增量重试而不是指数增量(首先等待1秒,然后是2秒,3秒等)。听起来我需要delayExpresion,但我不熟悉SpEL知道在这里使用什么。我试过了:

@Retryable(maxAttempts = 5, backoff = @Backoff(delay = 1000, delayExpression = "#{delay + 1000}"))

我正在尝试使用SpEL做什么(延迟增加1000)?或许,我的线性重试方法是否正确?

java spring-el spring-retry
1个回答
1
投票

这是不可能通过注释。

Retryable有一个interceptor()选项:

/**
 * Retry interceptor bean name to be applied for retryable method. Is mutually
 * exclusive with other attributes.
 * @return the retry interceptor bean name
 */
String interceptor() default "";

因此,您应该考虑通过RetryOperationsInterceptor构建一个RetryInterceptorBuilder bean,并在那里注入一个具有所需线性逻辑的自定义BackOffPolicy

© www.soinside.com 2019 - 2024. All rights reserved.