Spring Batch - Как получить доступ к JobParameters или JobExecution для динамически создаваемого задания? - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть динамически создаваемый / настраиваемый список ReportJobs, которые реализованы как стандартные экземпляры пакетных заданий.Эти задания выполняются планировщиком задач Spring

@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);
    }
}

Как видите, эти задания не являются бобами Spring, они создаются на лету.Можно ли получить доступ к JobParameters и т. Д. Во время выполнения ItemWriter или обработчика заданий?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Можно ли получить доступ к JobParameters и т. Д. Во время выполнения ItemWriter или процессора заданий?

Да, вы можете сохранить выполнение шага в своем процессоре / записывающем устройстве с помощью @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;
   }

}

Надеюсь, это поможет.

0 голосов
/ 13 февраля 2019

Если вы знаете имя задания, вы можете использовать функцию извлечения jobInstance, используя JobExplorer , а из JobInstance, используя тот же JobExplorer , вы можете получить JobExecutions.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...