Spring Batch Job采用先前的执行参数 [英] Spring Batch Job taking previous execution parameters

查看:401
本文介绍了Spring Batch Job采用先前的执行参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Spring Cloud数据流,并创建了一个包含作业的Spring Cloud任务.该作业具有一个名为last_modified_date的参数,该参数是可选的.在代码中,我指定了last_modified_date为null(即尚未作为参数传递)的日期.问题是,如果我为作业的一个实例传递了last_modified_date,但对于下一个我没有传递,则它在上一次执行时选择了那个,而不是将其传递为null并从代码中获取它.

I am using spring cloud dataflow and have created a spring cloud task which contains a job. This job has a parameter called last_modified_date, which is optional. In the code, I have specified which date to take in case last_modified_date is null, that is, it has not been passed as a parameter. The issue is that if for one instance of the job I pass the last_modified_date but for the next one I don't, it picks up the one in the last execution rather than passing it as null and getting it from the code.

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

有没有办法阻止新的作业实例从先前的作业实例获取参数?

Is there a way I can stop the new job instance from taking parameters from the previous job instance?

推荐答案

我认为您没有为JobBuilder提供JobParametersIncrementer.示例:

I think that you didn't provide JobParametersIncrementer to your JobBuilder. Example:

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

这篇关于Spring Batch Job采用先前的执行参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆