我使用H2数据库作为作业存储库。重新启动应用程序后,我需要继续或重新启动以前未完成的Spring Batch作业。
现在,我使用以下代码来实现此目的:
jobRegistry.register(new ReferenceJobFactory(documetPipelineJob));
List<String> jobs = jobExplorer.getJobNames();
for (String job : jobs) {
Set<JobExecution> runningJobs = jobExplorer.findRunningJobExecutions(job);
for (JobExecution runningJob : runningJobs) {
runningJob.setStatus(BatchStatus.FAILED);
runningJob.setEndTime(new Date());
jobRepository.update(runningJob);
jobOperator.restart(runningJob.getId());
LOGGER.info("Job restarted: " + runningJob);
}
它工作正常,但有一个副作用-它在BATCH_JOB_EXECUTION
表中产生新记录,并为其分配新的executionId
值。但是我使用executionId
值来跟踪作业状态:
jobExplorer.getJobExecution(executionId).getStatus()
因此,我使用以下逻辑-我安排作业并返回executionId
。以后,我使用此executionId
来跟踪我的工作状态。通过上面提到的重启逻辑,我返回了executionId
,然后重启了应用程序。在应用程序启动之后,我的逻辑重启了未完成的作业,并为其分配了新的executionId
。因此,在这种情况下,由于我只有旧的executionId
,因此无法跟踪新的重启作业的状态。
在这种情况下,如何正确检查作业状态或如何正确重新启动作业,以便能够使用旧的executionId
来跟踪其状态?