监视弹簧批处理作业的进度

时间:2016-12-28 08:56:50

标签: spring spring-batch

我正在使用带有java配置的spring批处理编写各种作业。

我需要获得当前的工作状态 例如 当前正在运行哪些步骤(我可能同时运行多个步骤) 哪些步骤失败(状态和退出代码) 等

我在网上看到的唯一例子是基于XML的spring批处理,我想只使用java配置。

感谢。

2 个答案:

答案 0 :(得分:2)

另一种选择是使用JobExplorer

  

浏览执行运行或历史作业和步骤的入口点。由于数据可能会从持久存储中重新水合,因此它可能不包含执行活动时可能存在的易失性字段。

List<JobExecution> jobExecutions = jobExplorer.getJobExecutions(jobInstance);
for (JobExecution jobExecution : jobExecutions) {
    jobExecution.getStepExecutions();
    //read step info
 }

对于创建jobExplorer,你必须使用工厂:

import org.springframework.batch.core.explore.support.JobExplorerFactoryBean;
JobExplorerFactoryBean factory = new JobExplorerFactoryBean();
factory.setDataSource(dataSource);
factory.getObject();

答案 1 :(得分:0)

我在spring批次元数据表上使用这两个查询来了解作业进度和步骤详细信息。

SELECT * FROM BATCH_JOB_EXECUTION ORDER BY START_TIME DESC;

SELECT * FROM BATCH_STEP_EXECUTION WHERE JOB_EXECUTION_ID=? ORDER BY STATUS;

使用First查询,我首先找到与我的作业执行相对应的JOB_EXECUTION_ID,然后在第二个查询中使用该ID来查找有关特定步骤的详细信息。

此外,您的配置选项(Java或XML)与Spring Batch元数据无关。如果您持久化数据,那么它的XML配置或Java配置并不重要。

对于基于Java的监控 - 您可以使用JobExplorer&amp; JobRepository bean来查询工作等。

e.g。来自List<JobInstance>&amp; jobExplorer.getJobInstances的{​​{1}} jobExplorer.getJobExecutions(jobInstance)等。

从JobExecutions您可以获得StepExecutions等。

您可能需要为JobRegistryBeanPostProcessor&amp;而设置JobExplorer bean,如下所示JobRepository正常工作。

@Bean
    public JobRegistryBeanPostProcessor jobRegistryBeanPostProcessor(
        JobRegistry jobRegistry) {
    JobRegistryBeanPostProcessor jobRegistryBeanPostProcessor = new JobRegistryBeanPostProcessor();
    jobRegistryBeanPostProcessor.setJobRegistry(jobRegistry);
    return jobRegistryBeanPostProcessor;
    }