我正在使用带有java配置的spring批处理编写各种作业。
我需要获得当前的工作状态 例如 当前正在运行哪些步骤(我可能同时运行多个步骤) 哪些步骤失败(状态和退出代码) 等
我在网上看到的唯一例子是基于XML的spring批处理,我想只使用java配置。
感谢。
答案 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;
}