У меня есть приложение весенней загрузки, в которое встроен шаблон отдыха. Остальной шаблон предназначен для переопределения соединения и чтения тайм-аутов. Когда время ожидания приложения истекло, у меня установлен шаблон повторных попыток повторных попыток подключения и чтения тайм-аутов. У меня проблема с моим шаблоном повтора;Я не уверен, почему это выполняется таким образом. Любые советы будут полезны. Ниже приведен код моего шаблона отдыха, шаблон повтора и политика, к которой он повторяется. Я получаю сообщение о том, что в моем 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();
}
});
}
}