Reputation: 323
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
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
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