java - 配置RetryTemplate测试除404之外的所有失败代码

标签 java spring spring-retry

我对 Spring Boot 有点陌生,在设置 RetryTemplate 来重试除 404 之外的所有失败异常代码时遇到问题。以下是我的代码:

@Bean
public RetryTemplate createRetryTemplate() {
    SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
    retryPolicy.setMaxAttempts(maxAttempts);

    UniformRandomBackOffPolicy backOffPolicy = new UniformRandomBackOffPolicy();
    backOffPolicy.setMinBackOffPeriod((long) minBackOffPeriod);
    backOffPolicy.setMaxBackOffPeriod(maxBackOffPeriod);

    RetryTemplate retryTemplate = new RetryTemplate();
    retryTemplate.setRetryPolicy(retryPolicy);
    retryTemplate.setBackOffPolicy(backOffPolicy);
    return retryTemplate;
}

我知道我需要制定一项政策,但不确定如何执行。任何帮助将不胜感激。

最佳答案

我会尝试使用ExceptionClassifierRetryPolicy来检测抛出的异常的类型,并根据该类型返回不同的重试策略:

class HttpStatusRetryPolicy extends ExceptionClassifierRetryPolicy {
    public HttpStatusRetryPolicy() {
        final NeverRetryPolicy doNotRetry = new NeverRetryPolicy();
        final SimpleRetryPolicy simpleRetryPolicy = new SimpleRetryPolicy();
        // configure your RetryPolicy here:
        // retryPolicy.setMaxAttempts(maxAttempts);
        // ...
        this.setExceptionClassifier(throwable -> {
            if (throwable instanceof HttpClientErrorException.NotFound) { // 404
                return doNotRetry;
            }
            return simpleRetryPolicy;
        });
    }
}

关于java - 配置RetryTemplate测试除404之外的所有失败代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58174521/

相关文章:

Spring Security 基本配置

java - Apache 意外暂停发出请求

ajax - Spring security session 超时处理 Ajax 调用重定向到登录不起作用

java - 创建重试模板以在连接超时和读取超时时重试

java - 在 eclipse rcp 应用程序中使用 css 边框属性

java - 从 android studio 中的 string.xml 获取信息不起作用

java - 如何在 spring boot 中从 application.properties 文件创建可配置的 Retryable maxAttempts 和 backoff

spring-integration - Spring 与 ExceptionClassifierRetryPolicy 重试集成

java - 在 Android Studio 中实现 Recyclerview 时应用程序崩溃

java - 我如何在 MVC-gui 中使用 JUNG2?