Spring Batch-如何访问动态创建的Job的JobParameters或JobExecution?

时间:2019-02-12 16:14:02

标签: spring-boot spring-batch

我有一个动态创建/配置的ReportJob列表,这些列表实现为标准的Spring Batch作业实例。这些作业由Spring Task Scheduler执行

@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
    taskRegistrar.setScheduler(taskExecutor());

    // create report jobs
    for (Map.Entry<String, ReportConfiguration> entry : jobsConfiguration.getReports().entrySet()) {
        final ReportConfiguration reportConfiguration = entry.getValue();
        final Job reportJob = createReportJob(entry.getKey(), reportConfiguration);

        CronTask ct = new CronTask(new Runnable() {
            @Override
            public void run() {
                final JobParameters jobParameters = new JobParametersBuilder()
                    .addDate("started", new Date())
                    .toJobParameters();

                try {
                    jobLauncher.run(reportJob, jobParameters);
                } catch (JobExecutionException e) {
                    LOG.warn("cannot execute reportJob");
                }
             }
        }, reportConfiguration.getCron());

        taskRegistrar.addCronTask(ct);
    }
}

如您所见,这些作业不是弹跳豆,而是即时创建的。在ItemWriter或Job处理器执行期间是否可以访问JobParameters等?

2 个答案:

答案 0 :(得分:0)

如果您知道职位名称,则可以使用JobExplorer来检索jobInstance,并使用相同的JobExplorer从JobInstance中来检索JobExecutions。

答案 1 :(得分:0)

  

在执行ItemWriter或Job处理器期间是否可以访问JobParameters等?

是的,您可以使用@BeforeStep回调将步骤执行保存在处理器/写入器中,然后可以从StepExecution获取访问作业参数。这是一个示例:

public class MyItemWriter implements ItemWriter<Object> {
   private StepExecution stepExecution;

   public void write(List<? extends Object> items) throws Exception {
      JobParameters jobParameters = this.stepExecution.getJobParameters();
      // use job parameters
   }

   @BeforeStep
   public void saveStepExecution(StepExecution stepExecution) {
      this.stepExecution = stepExecution;
   }

}

希望这会有所帮助。