Siddhant Sorann
Siddhant Sorann

Reputation: 323

Spring Batch Job taking previous execution parameters

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?

Upvotes: 8

Views: 1915

Answers (2)

Duliamo Ergassia
Duliamo Ergassia

Reputation: 3

I think that Mahmoud Ben Hassine's reply in this GH issue could be the solution.

https://github.com/spring-projects/spring-batch/issues/4466#issuecomment-1777222632

So in your case, not using an incrementer is the way to go. An incrementer is really only useful when there is a clearly defined sequence of job instances based on job parameters (ie the next job instance is defined by incrementing the parameters of the previous job instance).

Upvotes: 0

mateu1
mateu1

Reputation: 1

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

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

Upvotes: 0

Related Questions