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 方法以确保作业参数始终递增。