JVM崩溃后的Spring Batch

Yos*_*arr 7 spring spring-batch

如何在JVM崩溃后重新启动Jobs?

当我的JVM崩溃或系统出现故障时,我运行了很多在Spring Batch框架中实现的Jobs.如何在失败后重新启动这些作业?

rob*_*lor 7

在重新启动它们之前,您需要将“正在运行”的作业标记为失败,如下所示:

List<String> jobs = jobExplorer.getJobNames();
for (String job : jobs) {
    Set<JobExecution> runningJobs = jobExplorer.findRunningJobExecutions(job);

    for (JobExecution runningJob : runningJobs) {
        try {
            runningJob.setStatus(BatchStatus.FAILED);
            runningJob.setEndTime(new Date());
            jobRepository.update(runningJob);
            jobOperator.restart(runningJob.getId());
        } catch (Exception e) {
            LOG.error(e.getMessage(), e);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Ori*_*Dar 6

基本上,您可以执行以下操作:

  1. JobExplorer在应用程序上下文中配置工厂bean:

  2. JobOperator在应用程序上下文中配置bean

  3. 查询jobExplorer以获取不同的作业名称: jobExplorer.getJobNames()

  4. 对于步骤(3)中的每个作业,查询jobExplorer以查找未完成的作业: jobExplorer.findRunningJobExecutions(String jobName)

  5. 对于每个JobExecution步骤(4)调用:jobOperator.restart(jobExecution.getJobId())

  6. 在启动任何其他作业之前,请确保在引导顺序期间调用此过程

从技术上讲,可以findRunningJobExecutions()通过覆盖来合并步骤3 + 4 JobExecutionDao,但是当前的API不支持它.

有关上述Spring bean配置的帮助,请参阅参考文档