Использование возврата 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());
Другие вопросы по тегам