Yos*_*arr 7 spring spring-batch
如何在JVM崩溃后重新启动Jobs?
当我的JVM崩溃或系统出现故障时,我运行了很多在Spring Batch框架中实现的Jobs.如何在失败后重新启动这些作业?
在重新启动它们之前,您需要将“正在运行”的作业标记为失败,如下所示:
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)
基本上,您可以执行以下操作:
JobExplorer在应用程序上下文中配置工厂bean:
JobOperator在应用程序上下文中配置bean
查询jobExplorer以获取不同的作业名称: jobExplorer.getJobNames()
对于步骤(3)中的每个作业,查询jobExplorer以查找未完成的作业:
jobExplorer.findRunningJobExecutions(String jobName)
对于每个JobExecution步骤(4)调用:jobOperator.restart(jobExecution.getJobId())
在启动任何其他作业之前,请确保在引导顺序期间调用此过程
从技术上讲,可以findRunningJobExecutions()通过覆盖来合并步骤3 + 4 JobExecutionDao,但是当前的API不支持它.
有关上述Spring bean配置的帮助,请参阅参考文档
| 归档时间: |
|
| 查看次数: |
2155 次 |
| 最近记录: |