JobRestartException:JobInstance 已经存在并且不可重启
JobRestartException: JobInstance already exists and is not restartable
我正在使用 Spring 批处理 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()
的原因。我想在每次任务 运行s 时启动一个新作业,即作业的一个新实例到 运行,即使上次作业失败或停止或任何其他情况也是如此。但我收到以下错误:
org.springframework.batch.core.repository.JobRestartException: JobInstance already exists and is not restartable
只有在作业未成功完成的情况下才会发生这种情况。关于解决方案有什么想法吗?
一个JobInstance
只能成功完成一次。当您通过 Spring 引导启动 Spring 批处理作业时,如果有 JobParametersIncrementer
提供(如您有)。但是...当 Spring Batch 进行递增时,它只会在前一个作业成功时递增。在您的情况下,您希望它始终递增。因此,您将需要编写自己的 CommandLineRunner
,它总是递增 JobParameters
。
Spring Boot 的 JobLauncherCommandLineRunner
是启动作业的代码所在的位置。您可能希望扩展它并覆盖它的 execute
方法以确保作业参数始终递增。
我正在使用 Spring 批处理 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()
的原因。我想在每次任务 运行s 时启动一个新作业,即作业的一个新实例到 运行,即使上次作业失败或停止或任何其他情况也是如此。但我收到以下错误:
org.springframework.batch.core.repository.JobRestartException: JobInstance already exists and is not restartable
只有在作业未成功完成的情况下才会发生这种情况。关于解决方案有什么想法吗?
一个JobInstance
只能成功完成一次。当您通过 Spring 引导启动 Spring 批处理作业时,如果有 JobParametersIncrementer
提供(如您有)。但是...当 Spring Batch 进行递增时,它只会在前一个作业成功时递增。在您的情况下,您希望它始终递增。因此,您将需要编写自己的 CommandLineRunner
,它总是递增 JobParameters
。
Spring Boot 的 JobLauncherCommandLineRunner
是启动作业的代码所在的位置。您可能希望扩展它并覆盖它的 execute
方法以确保作业参数始终递增。