Получите текущее значение отсрочки при использовании Spring RetryTemplate
Итак, я экспериментировал с шаблоном повторных попыток Spring. Все работает как положено. Однако я бы хотел иметь возможность извлекать или регистрировать текущее время отсрочки, которое используется. Я просмотрел документы / искал повсюду, но не могу найти простого способа получить это.
@Bean
public RetryTemplate retryTemplate() {
RetryTemplate retryTemplate = new RetryTemplate();
ExponentialBackOffPolicy exponentialBackOffPolicy = new ExponentialBackOffPolicy();
exponentialBackOffPolicy.setMaxInterval(10000); // 10 secs
exponentialBackOffPolicy.setMultiplier(2); // double the backoff
retryTemplate.setBackOffPolicy(exponentialBackOffPolicy);
SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
retryPolicy.setMaxAttempts(2);
retryTemplate.setRetryPolicy(retryPolicy);
return retryTemplate;
}
А я вот так использую...
retryTemplate.execute(arg0 -> {
myService.templateRetryService();
return null;
});
RetryCallback обеспечивает только RetryConext но не содержит то, что мне нужно.
Любые идеи приветствуются. Спасибо.
1 ответ
Решение
Вы можете установить собственный Sleeper
на ExponentialBackOffPolicy
для регистрации времени.
/**
* Public setter for the {@link Sleeper} strategy.
* @param sleeper the sleeper to set defaults to {@link ThreadWaitSleeper}.
*/
public void setSleeper(Sleeper sleeper) {
this.sleeper = sleeper;
}
Спящий по умолчанию следующий:
@SuppressWarnings("serial")
public class ThreadWaitSleeper implements Sleeper {
@Override
public void sleep(long backOffPeriod) throws InterruptedException {
Thread.sleep(backOffPeriod);
}
}