如何使弹簧@retryable可配置?

2022-09-02 19:39:08

我有这段代码

@Retryable(maxAttempts = 3, stateful = true, include = ServiceUnavailableException.class,
        exclude = URISyntaxException.class, backoff = @Backoff(delay = 1000, multiplier = 2) )
public void testThatService(String serviceAccountId)
        throws ServiceUnavailableException, URISyntaxException {

这里的一些实现 }

有没有办法使用@Value来配置maxAttempts,延迟和乘法器?或者有没有其他方法可以使注释中的此类字段可配置?


答案 1

随着Spring-retry版本1.2的发布,这是可能的。@Retryable可以使用 SPEL 进行配置。

@Retryable(
    value = { SomeException.class,AnotherException.class },
    maxAttemptsExpression = "#{@myBean.getMyProperties('retryCount')}",
    backoff = @Backoff(delayExpression = "#{@myBean.getMyProperties('retryInitalInterval')}"))
public void doJob(){
    //your code here
}

有关更多详细信息,请参阅:https://github.com/spring-projects/spring-retry/blob/master/README.md


答案 2

如果要提供默认值,然后选择性地在 application.properties 文件中重写它:

@Retryable(maxAttemptsExpression = "#{${my.max.attempts:10}}")
public void myRetryableMethod() {
    // ...
}

推荐