I am new to Spring Batch, I have a Spring Boot App, and I want to set up a job that executes only once after Spring Boot app gets started, as we will run app each day
In my current solution, I tried to use attribute @Scheduled
, but I am not sure what value it should have.
@Scheduled(cron = "0/10 * * * * *")
public void runMyJob() {
jobLauncher.run(job, newExecution());
}
private JobParameters newExecution() {
Map<String, JobParameter> parameters = new HashMap<>();
JobParameter parameter = new JobParameter(new Date());
parameters.put("currentTime", parameter);
return new JobParameters(parameters);
}
}
@Bean
public Step jobStep(ItemReader<ReadObject> reader,
ItemWriter<WriteObject> writer,
StepBuilderFactory stepBuilderFactory) {
return stepBuilderFactory.get("jobStep1")
.<ReadObject, WriteObject>chunk(1)
.reader(reader)
.writer(writer)
.build();
}
@Bean
public Job myJob(Step jobStep,
JobBuilderFactory jobBuilderFactory) {
return jobBuilderFactory.get("myJob")
.incrementer(new RunIdIncrementer())
.flow(jobStep)
.end()
.build();
}
}
@SpringBootApplication
@EnableBatchProcessing
@EnableScheduling
public class SpringBatchApplication {
public static void main(String[] args) {
try{
SpringApplication.run(SpringBatchApplication.class, args);
} catch (Exception e) {
e.printStackTrace();
}
}
}