Я работаю над приложением 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;
}
});
}
}
});
}