Реализация отказоустойчивости в Spring Batch - PullRequest
0 голосов
/ 16 мая 2019

У меня в пакетной конфигурации Spring реализовано следующее пакетное задание:

@Bean
public Job myJob(Step step1, Step step2, Step step3) {
    return jobs.get("myJob").start(step1).next(step2).next(step3).build();
}

@Bean
public Step step1(ItemReader<String> myReader,
        ItemProcessor<String, String> myProcessor,
        ItemWriter<String> myWriter) {
    return steps.get("step1").<String, String>chunk(1)
            .reader(myReader)
            .processor(myProcessor)
            .writer(myWriter)
            .build();
}

Я хотел бы повторить шаг 1 (также шаг 2 и шаг 3 и т. Д.) Для определенного исключения и откатить задание в случае любого сбоя (такжемежду попытками).Я понимаю, что откат не будет автоматическим, и мне ясно, что откатывать для каждого шага с написанием пользовательского кода.

Каков наилучший способ реализовать это?

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Функции отказоустойчивости в Spring Batch применяются к элементам, ориентированным на куски, а не ко всему шагу.

То, что вы можете попытаться сделать, - это использовать поток с решающим устройством, при котором вы перезапускаете с шага 1, если на одном из последующих шагов происходит исключение.

0 голосов
/ 16 мая 2019

Spring Framework предоставляет аннотации @Retryable и @Recover для повтора и восстановления в случае сбоя.Вы можете проверить эту статью.https://www.baeldung.com/spring-retry

...