Как настроить RetryTemplate в Spring Batch с конфигурацией Java

Я пытаюсь настроить RetryTemplate в Spring Batch, я просто не могу найти пример того, как добавить RetryTemplate в StepBuilderFactory. Я нашел этот пример, чтобы настроить его в приложении SpringBoot, https://dzone.com/articles/how-to-use-spring-retry-template, но с Spring Batch не повезло.

Причина, по которой я пытаюсь использовать RetryTemplate, заключается в настройке Exponential BackOffPolicy (Spring Batch, как настроить период повтора для неудачных заданий).

Я предполагаю, что подключить RetryTemplate было бы так же просто, как установить Bean-компонент RetryTemplate, что-то в этом роде (измененный код из @Mahmoud Ben Hassine answer Spring Batch, как настроить период повтора для неудачных заданий):

@Bean
public RetryTemplate testExponentialBackoff() throws Exception {
        // configure backoff policy
        ExponentialBackOffPolicy exponentialBackOffPolicy = new ExponentialBackOffPolicy();
        exponentialBackOffPolicy.setInitialInterval(1000);
        exponentialBackOffPolicy.setMultiplier(2.0);
        exponentialBackOffPolicy.setMaxInterval(10000);

        // configure retry policy
        SimpleRetryPolicy simpleRetryPolicy = new SimpleRetryPolicy();
        simpleRetryPolicy.setMaxAttempts(5);

        // configure retry template
        RetryTemplate retryTemplate = new RetryTemplate();
        retryTemplate.setBackOffPolicy(exponentialBackOffPolicy);
        retryTemplate.setRetryPolicy(simpleRetryPolicy);
        return retryTemplate;
    }

Я не нахожу способ подключить его к StepBuilderFactory. Я бы предположил, что это будет что-то похожее на стандартную повторную попытку:

  .faultTolerant()
  .retryLimit(3)
  .retry(ConnectTimeoutException.class)

Есть ли у кого-нибудь пример / шаблон о том, как настроить его с помощью конфигурации Java?

Любая помощь / пример приветствуется. Спасибо, Маркус.


person msuzuki    schedule 23.06.2021    source источник


Ответы (1)


Если ваша цель - установить собственную политику отсрочки передачи, нет необходимости предоставлять для этого весь RetryTemplate, вы можете сделать это с помощью метода FaultTolerantStepBuilder#backOffPolicy, например:

// configure backoff policy
ExponentialBackOffPolicy exponentialBackOffPolicy = new ExponentialBackOffPolicy();
// customize exponentialBackOffPolicy as needed

Step step = stepBuilderFactory.get("step")
        .chunk(5)
        // configure reader/writer etc
        .faultTolerant()
        .backOffPolicy(exponentialBackOffPolicy)
        // set other properties
        .build();

Теперь, если вы действительно хотите предоставить собственный объект RetryOperations, вам нужно расширить FaultTolerantStepBuilder и переопределить метод createRetryOperations.

person Mahmoud Ben Hassine    schedule 24.06.2021
comment
Спасибо @Mahmoud Ben Hassine, это то, что я ищу. Как реализовать ExponentialBackOffPolicy. Будучи Spring, я думал, что реализовать / wire не составит труда. - person msuzuki; 24.06.2021