Java JobRestartException:JobInstance已存在且不可重新启动
我将Spring批处理与Spring云任务一起使用。我的工作中有以下配置:Java JobRestartException:JobInstance已存在且不可重新启动,java,spring,spring-batch,spring-cloud-task,Java,Spring,Spring Batch,Spring Cloud Task,我将Spring批处理与Spring云任务一起使用。我的工作中有以下配置: @Bean public Job jobDemo( @Value("${jobname}")String jobName, JobBuilderFactory jobBuilderFactory, JobCompletionNotificationListener listener ) {
@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();
}
我不想在作业中使用重新启动功能,这就是为什么我将.preventstart()
放在作业中的原因。我想在每次任务运行时启动一个新作业,也就是说,即使在上次作业失败或停止时,也要运行一个新的作业实例。但我得到了以下错误:
org.springframework.batch.core.repository.JobRestartException: JobInstance already exists and is not restartable
只有在作业未成功完成的情况下才会发生这种情况。有关解决方案的任何想法?A
JobInstance
只能成功完成一次。当您通过Spring Boot启动Spring批处理作业时,Spring批处理逻辑以增加JobParameters
(如果有JobParametersIncrementer
提供)的值。但是…当Spring批处理执行该递增操作时,它仅在上一个作业成功时递增。在您的情况下,您希望它始终递增。因此,您需要编写自己的CommandLineRunner
,它始终递增JobParameters
Spring Boot的
JobLauncherCommandLineRunner
是启动作业的代码所在。您可能希望扩展它并覆盖它的execute
方法,以确保作业参数始终递增。我假设您是通过Spring Boot执行的?@MichaelMinella是的!因此,当我们刚开始任务时,批处理也开始了。我改了密码。但没有添加JobLauncherCommandLineRunner,而是添加了我自己的paras incrementer实现。我注意到前一个是你提到的行为。也可以吧?