从数据流重新启动后,Spring 批处理从头开始
Posted
技术标签:
【中文标题】从数据流重新启动后,Spring 批处理从头开始【英文标题】:Spring batch starts from beginning after restart from dataflow 【发布时间】:2020-12-26 11:34:59 【问题描述】:我开发了一个简单的spring批处理应用程序并通过spring cloud dataflow启动它。 但是,当我从数据流重新启动失败的作业时,批处理会从头开始,而不是从最后一次执行开始。 招聘启事:
Map<String,JobParmeter> maps = new HashMap<>();
maps.put("jobID",new JobParameter(System.currentTimeMillis()));
JobExecution jobExecution = jobLauncher.run(job,new JobParameters(maps));
工作配置:
jobBuilderFactory.get("job").start(step).build();
其他一切都是@Autowired,没有自定义配置。我正在使用 Spring Boot 应用程序。
如果我不使用自定义作业启动器(上述代码中的 JobLaunch),批处理将始终重新启动。即使前一个实例已完成,也永远不会创建作业的新实例。
请帮助我正确配置作业。
【问题讨论】:
【参考方案1】:由于您在每次运行时为作业参数添加新时间戳,因此每次都会获得不同的作业实例。如果您确实想重新启动 FAILED 作业实例,则需要传递与上次运行相同的识别作业参数(在您的情况下为 jobID
)。
即使先前的实例已完成,也永远不会创建新的作业实例。
这是设计使然。无法重新启动 COMPLETED 作业实例。
【讨论】:
是的,我明白这一点,但我正在使用 spring 云数据流来重新启动一个应该传递相同参数的作业(在我的例子中是 jobID)。我没有手动传递任何参数。但每次我重新启动作业时,它都会创建新的作业实例 ID。以上是关于从数据流重新启动后,Spring 批处理从头开始的主要内容,如果未能解决你的问题,请参考以下文章