Spring Retry Rest Template Функциональность шаблона повтора - PullRequest
1 голос
/ 16 октября 2019

У меня есть приложение весенней загрузки, в которое встроен шаблон отдыха. Остальной шаблон предназначен для переопределения соединения и чтения тайм-аутов. Когда время ожидания приложения истекло, у меня установлен шаблон повторных попыток повторных попыток подключения и чтения тайм-аутов. У меня проблема с моим шаблоном повтора;Я не уверен, почему это выполняется таким образом. Любые советы будут полезны. Ниже приведен код моего шаблона отдыха, шаблон повтора и политика, к которой он повторяется. Я получаю сообщение о том, что в моем bean-компоненте retryTemplate возникла ошибка при создании. Странно, что мой журнал показывает выполнение doWithRetry. Я полагаю, что есть ошибка в блоке template.execute кода, но не могу понять, где я допустил ошибку.

@Bean
public RestTemplate restTemplate() {

    RestTemplate restTemplate = new RestTemplate(getClientHttpRequestFactory());
    return restTemplate;
}

private HttpComponentsClientHttpRequestFactory getClientHttpRequestFactory() {
    HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
    requestFactory.setReadTimeout(readTimeout);
    requestFactory.setConnectTimeout(connectTimeout);
    return requestFactory;
}

 @Bean
public RetryTemplate retryTemplate() {

    FixedBackOffPolicy backOffPolicy = new FixedBackOffPolicy();
    backOffPolicy.setBackOffPeriod(backOffPeriod);

    RetryTemplate template = new RetryTemplate();
    template.setRetryPolicy(new ExceptionClassifierRetryPolicy());
    template.setBackOffPolicy(backOffPolicy);

    template.execute(new RetryCallback<Void, RuntimeException>() {
        @Override
        public Void doWithRetry(RetryContext retryContext) {
            //System.out.println("I AM RUNNING");
            throw new IllegalStateException("Something went wrong");
        }
    });

    return template;
}

public class ExceptionClassifierRetryPolicy extends org.springframework.retry.policy.ExceptionClassifierRetryPolicy {
@Value("${maxAttempts:-1}")
private Integer maxAttempts;

public ExceptionClassifierRetryPolicy() {
    final SimpleRetryPolicy simpleRetryPolicy = new SimpleRetryPolicy();
    simpleRetryPolicy.setMaxAttempts(maxAttempts);

    this.setExceptionClassifier(new Classifier<Throwable, RetryPolicy>() {
        @Override
        public RetryPolicy classify(Throwable classifiable) {
            if ( classifiable instanceof SocketTimeoutException || classifiable instanceof ConnectionPoolTimeoutException || classifiable instanceof ResourceAccessException) {
                return simpleRetryPolicy;
            }
            return new NeverRetryPolicy();
        }
    });
}

}

...