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 способ убедиться, что параметры задания всегда увеличиваются.

Другие вопросы по тегам