Spring Batch Job принимает предыдущие параметры выполнения - PullRequest
0 голосов
/ 10 июня 2019

Я использую поток данных Spring Cloud и создал задачу Spring Cloud, которая содержит задание.Это задание имеет параметр last_modified_date, который является необязательным.В коде я указал, какую дату брать в случае, если last_modified_date имеет значение null, то есть он не был передан в качестве параметра.Проблема в том, что если для одного экземпляра задания я передаю last_modified_date, а для следующего - нет, он выбирает тот в последнем выполнении, а не передает его как ноль и получает его из кода.

@Component
@StepScope
public class SalesforceAdvertiserLoadTasklet implements Tasklet {

  @Value("#{jobParameters['last_modified_date']}")
  protected Date lastModifiedDate;

  private static final Logger logger =
      LoggerFactory.getLogger(SalesforceAdvertiserLoadTasklet.class);

  @Override
  public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext)
      throws Exception {

    if(lastModifiedDate == null) {
      lastModifiedDate =
          Date.from(LocalDate.now().minusDays(1).atStartOfDay(ZoneId.systemDefault()).toInstant());
    }
    logger.info("In Method: runSalesforceAdvertiserLoadJob launch started on last_modified_date {}",
        lastModifiedDate);

    logger.info("Getting advertisers from SalesForce");
    try {
      getAdvertisersFromSalesforceAndAddtoDb();
    } catch (JsonSyntaxException | IOException | ParseException e) {
      logger.error("ERROR--> {}", e.getMessage());
    }
    return RepeatStatus.FINISHED;
  }
@Bean
  public JobParametersIncrementer runIdIncrementor() {
    return new RunIdIncrementer();
  }
@Bean
  public Job salesforceAdvertiserLoadJob() {
    return jobBuilderFactory.get(SalesforceJobName.salesforceAdvertiserLoadJob.name())
        .incrementer(runIdIncrementor())
        .listener(batchJobsExecutionListener)
        .start(stepsConfiguration.salesforceAdvertiserLoadStep()).build();
  }

Можно ли как-то помешать новому экземпляру задания получать параметры из предыдущего экземпляра задания?

1 Ответ

0 голосов
/ 10 июня 2019

Я думаю, что вы не предоставили JobParametersIncrementer своему JobBuilder.Пример:

Job job = jobBuilderFactory.get(jobName)
    .incrementer(new RunIdIncrementer())
    .start(step)
    .end()
    .build();
...