Использование возврата Spring RetryTemplate
Например, у меня конфигурация Spring RetryTemplate:
@Configuration
@EnableRetry
public class RetryTemplateConfig {
@Bean
public RetryTemplate retryTemplate() {
SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
retryPolicy.setMaxAttempts(5);
FixedBackOffPolicy backOffPolicy = new FixedBackOffPolicy();
backOffPolicy.setBackOffPeriod(300000);
RetryTemplate template = new RetryTemplate();
template.setRetryPolicy(retryPolicy);
template.setBackOffPolicy(backOffPolicy);
return template;
}
}
И я хочу повторно вызвать этот метод, если было обнаружено исключение:
@Scheduled(cron = "${schedule.cron.update}")
public void calculate() throws Exception {
log.info("Scheduled started");
try {
retryTemplate.execute(retryContext -> {
myService.work();
return true;
});
} catch (IOException | TemplateException e) {
log.error(e.toString());
}
log.info("Scheduled finished");
}
Итак, мой метод work() в классе обслуживания может вызывать исключения:
public void send() throws IOException, TemplateException {
...
}
Похоже, все работает нормально, но я действительно не понимаю, что означает следующий код:
retryTemplate.execute(retryContext -> {
myService.work();
return true;
});
Почему я могу вернуться
true
,
null
,
new Object()
и прочее? На что это влияет и где будет использоваться? Что мне вернуть?
1 ответ
RetryTemplate выполняет RetryCallback, который является универсальным и может возвращать любой тип возврата, который вы определяете.
Если вам нужно получить данные об успешном выполнении, вы можете вернуть их в обратном вызове и получить позже в потоке
Возвращает: результат успешной операции.
Пример чтения файла с повторной попыткой:
return template.execute(context -> { FileUtils.copyURLToFile(new URL(path), copy); return FileUtils.readFileToString(copy, Charset.defaultCharset());