从数据流重新启动后,Spring批处理从头开始

问题描述

我已经开发了一个简单的spring批处理应用程序,并通过spring cloud数据流启动了它。 但是,当我从数据流重新启动失败的作业时,批处理从头开始,而不是从上一次执行继续。 JobLaunch:

Map<String,JobParmeter> maps = new HashMap<>();
maps.put("jobID",new JobParameter(System.currentTimeMillis()));
JobExecution jobExecution = jobLauncher.run(job,new JobParameters(maps));

JobConfig

jobBuilderFactory.get("job").start(step).build();

其他所有都是@Autowired,没有自定义配置。我正在使用Spring Boot应用程序。

如果我不使用自定义作业启动器(上面的代码中的Jobbaunch),该批处理将始终重新启动。即使先前的实例为COMPLETED,也永远不会创建作业的新实例。

请帮助我正确配置作业。

解决方法

由于每次运行都会向作业参数添加新的时间戳,因此每次都会获得一个不同的作业实例。如果您确实要重新启动FAILED作业实例,则需要传递与上一次运行相同的标识作业参数(在您的情况下为jobID)。

即使先前的实例已完成,也永远不会创建作业的新实例。

这是设计使然。无法重新启动COMPLETED作业实例。