JobRestartException: JobInstance уже существует и не перезапускается
Я использую Spring Batch с облачной задачей Spring. У меня есть следующие конфигурации в моей работе:
@Bean
public Job jobDemo(
@Value("${jobname}")String jobName,
JobBuilderFactory jobBuilderFactory,
JobCompletionNotificationListener listener
) {
return jobBuilderFactory.get(jobName)
.incrementer(new RunIdIncrementer())
.preventRestart()
.listener(listener)
.flow(stepA())
.end()
.build();
}
Я не хочу перезапускать функциональность в работе, поэтому я поставил .preventRestart()
, Я хочу запускать новое задание каждый раз, когда запускается задание, это новый экземпляр задания, которое запускается, даже если задание в последний раз не выполнено, остановлено или выполнено что-либо еще. Но я получаю следующую ошибку:
org.springframework.batch.core.repository.JobRestartException: JobInstance already exists and is not restartable
Это происходит только в senarios, когда работа не заканчивается успешно. Есть идеи по поводу решения?
1 ответ
JobInstance
может быть завершен только один раз успешно. Когда вы запускаете задание Spring Batch через Spring Boot, Spring Batch обрабатывает логику для увеличения JobParameter
если есть JobParametersIncrementer
обеспечивает (как у вас есть). Однако... когда Spring Batch делает это увеличение, оно увеличивается, только если предыдущее задание было успешным. В вашем случае вы хотите, чтобы он всегда увеличивался. Из-за этого вам нужно будет написать свой собственный CommandLineRunner
который всегда увеличивает JobParameters
,
Весенние ботинки JobLauncherCommandLineRunner
где код для запуска задания существует. Вы, вероятно, захотите расширить это и переопределить это execute
способ убедиться, что параметры задания всегда увеличиваются.