代码之家  ›  专栏  ›  技术社区  ›  Manas Saxena

获取上一次完成的作业执行上下文批处理

  •  0
  • Manas Saxena  · 技术社区  · 7 年前

    我正在尝试获取上次完成作业的执行上下文。代码如下:

    @Component
    public class MyJobDataReader implements ItemReader<MyDbEntity>, StepExecutionListener {
    
        @Autowired
        @Qualifier("jobService")
        JobService jobService;
    
        @Override
        public void beforeStep(StepExecution stepExecution) {
            Collection<JobExecution> jobExecutions = null;
            try {
                jobExecutions = jobService.listJobExecutionsForJob("myjob", 0, jobService.countJobExecutionsForJob("myjob"));
            } catch (NoSuchJobException e) {
                //log
            }
    
            JobExecution lastCompletedJobExecution =
                    jobExecutions
                    .stream()
                    .filter(param -> param.getExitStatus().getExitCode().equals(ExitStatus.COMPLETED.getExitCode()))
                    .findFirst()
                    .orElse(null);
    
            Long myExecutionContextParam = 
                    lastCompletedJobExecution
                    .getExecutionContext()
                    .getLong(contextParam);
        }
    }
    

    myExecutionContextParam 也为null,即使我在 BATCH_JOB_EXECUTION_CONTEXT 获取的作业执行的表。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Manas Saxena    7 年前

    问题是 jobService.listJobExecutionsForJob 返回了一个只有几个字段的JobExecution,然后我不得不调用 jobService.getJobExecution(jobExecutionId)