Java JobRestartException:JobInstance已存在且不可重新启动

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 ) {

我将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();
    }
我不想在作业中使用重新启动功能,这就是为什么我将
.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实现。我注意到前一个是你提到的行为。也可以吧?