Spring Batch作业重新启动和状态跟踪

时间:2018-07-04 05:51:27

标签: spring-batch spring-batch-job-monitoring

我使用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来跟踪其状态?

0 个答案:

没有答案