Выполнить шаблон повтора с политикой в ​​отдельном Java-классе - PullRequest
0 голосов
/ 09 октября 2019

Я работаю над приложением Spring Boot и в настоящее время использую шаблоны отдыха для интеграции повторов для определенных неудачных HTTP-соединений. Я интегрировал шаблон отдыха и настроил для него тайм-ауты, и теперь я сосредоточен на выполнении шаблона повторов с настраиваемой политикой повторов, но у меня возникают некоторые проблемы. Моя пользовательская политика повторов находится в отдельном классе, но я пытаюсь интегрировать ее в тот же класс, в котором создан шаблон повторов. Ниже приведен код для создания шаблона повтора, отдельный класс политики повторных попыток, а также попытка интеграции политики повторных попыток с кодом шаблона повторных попыток. Пользовательская политика повторных попыток настроена на запуск повторных попыток, когда приложение получает HTML-код 404.

открытый класс HttpFailedConnectionRetryPolicy extends ExceptionClassifierRetryPolicy {

public HttpFailedConnectionRetryPolicy(Integer maxAttempts) {
    final NeverRetryPolicy doNotRetry = new NeverRetryPolicy();
    final SimpleRetryPolicy simpleRetryPolicy = new SimpleRetryPolicy();
    simpleRetryPolicy.setMaxAttempts(maxAttempts);

    this.setExceptionClassifier(new Classifier<Throwable, RetryPolicy>() {
        @Override
        public RetryPolicy classify(Throwable throwable) {
            if (throwable instanceof HttpClientErrorException.NotFound) {
                return doNotRetry;
            }
            return simpleRetryPolicy;
        }
    });
}

}

public RetryTemplate retryTemplate () throws Throwable {RetryTemplate retryTemplate = new RetryTemplate ();

    FixedBackOffPolicy backOffPolicy = new FixedBackOffPolicy();
    backOffPolicy.setBackOffPeriod((long) maxBackOffPeriod);
    retryTemplate.setBackOffPolicy(backOffPolicy);

    NeverRetryPolicy doNotRetry = new NeverRetryPolicy();
    SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
    retryPolicy.setMaxAttempts(maxAttempts);
    retryTemplate.setRetryPolicy(retryPolicy);

    return retryTemplate.execute(new RetryCallback<RetryTemplate, Throwable>() {
        @Override
        public RetryTemplate doWithRetry(RetryContext retryContext) throws Throwable {
            class HttpFailedConnectionRetryPolicy extends ExceptionClassifierRetryPolicy {
                public HttpFailedConnectionRetryPolicy() {
                    this.setExceptionClassifier(new Classifier<Throwable, RetryPolicy>() {
                        @Override
                        public RetryPolicy classify(Throwable throwable) {
                            if (throwable instanceof HttpClientErrorException.NotFound) {
                                return doNotRetry;
                            }
                            return retryPolicy;
                        }
                    });
                }
            }
        }

        class HttpFailedConnectionRetryPolicy extends ExceptionClassifierRetryPolicy {
            public HttpFailedConnectionRetryPolicy() {
                this.setExceptionClassifier(new Classifier<Throwable, RetryPolicy>() {
                    @Override
                    public RetryPolicy classify(Throwable throwable) {
                        if (throwable instanceof HttpClientErrorException.NotFound) {
                            return doNotRetry;
                        }
                        return retryPolicy;
                    }
                });
            }
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...