Spring Batch Job Execution Listener-访问JobStep定义的子作业的详细信息



我有一个作业(父作业(的作业(子作业(。在父作业的作业执行侦听器中,我想访问每个子作业的所有详细信息(作业名称、步骤名称、读/写计数等(。我怎样才能做到这一点?

下面是示例代码。在parentJobExecutionListener的afterJob方法中,我想发送一封电子邮件(已经有了代码(,其中包含JOB1和JOB2的完整详细信息。afterJob方法中的以下代码打印JOB-STEP1和JOB-STEP2的详细信息。如何访问子作业(JOB1和JOB2(及其步骤的详细信息?

public class ParentJobConfig {
@Bean
public Job job1() {
Job job = jobBuilderFactory.get("JOB1")
.incrementer(new RunIdIncrementer())
.start(step11())
.next(step12())
.build();
return job;
}
@Bean
public Job job2() {
Job job = jobBuilderFactory.get("JOB2")
.incrementer(new RunIdIncrementer())
.start(step21())
.next(step22())
.build();
return job;
}
@Bean
public Step jobStep1() {
Step step = stepBuilderFactory.get("JOB-STEP1")
.job(job1())
.parametersExtractor(new DefaultJobParametersExtractor())
.build();
return step;
}
@Bean
public Step jobStep2() {
Step step = stepBuilderFactory.get("JOB-STEP2")
.job(job2())
.parametersExtractor(new DefaultJobParametersExtractor())
.build();
return step;
}
@Bean
public Job parentJob() {
Job job = jobBuilderFactory.get("PARENT-JOB")
.incrementer(new RunIdIncrementer())
.start(jobStep1())
.next(jobStep2())
.listener(parentJobExecutionListener())
.build();
return job;
}
@Bean
public JobExecutionListener parentJobExecutionListener() {
return new ParentJobExecutionListener ();
}
}
public class ParentJobExecutionListener extends JobExecutionListenerSupport {
@Override
public void afterJob(JobExecution jobExecution) {
List<StepExecution> stepExecutions = (List<StepExecution>) jobExecution.getStepExecutions();
Collection<StepExecution> stepExecutions = jobExecution.getStepExecutions();
for (StepExecution stepExecution : stepExecutions) {
System.out.println("Step Name: " + stepExecution.getStepName());
System.out.println("Read Count: " + stepExecution.getReadCount());
System.out.println("Skip Count: " + stepExecution.getSkipCount());
System.out.println("Write Count: " + stepExecution.getWriteCount());
}
}
}

我看不出有什么明显的方法可以访问此处创建的子作业执行:https://github.com/spring-projects/spring-batch/blob/d8fc58338d3b059b67b5f777adc132d2564d7402/spring-batch-core/src/main/java/org/springframework/batch/core/step/job/JobStep.java#L119(只有状态反映在步骤执行中(。

您可以在侦听器中使用作业资源管理器,并查询存储库中的子作业执行情况。

最新更新