Is it possible to dynamically configure a Job in spring-batch?
Here is what I want to do. I have created several different ItemReader, ItemWriter like below:
- FlatFileItemReader
- DBItemReader
- FlatFileItemWriter
- DBItemWriter
- .....
- XMLItemWriter
I want to be able to mix and match them dynamically while creating a batch Job. For example, suppose I need a Job with 2 steps. First step contains a Tasklet for pre-processing. Second Step will have a Tasklet for chunk based data processing using my reader/writer.... Something like this:
// define job parameters
JobParametersBuilder parameters = new JobParametersBuilder();
// create two steps
TaskletStep step1 = new TaskletStep();
TaskletStep step2 = new TaskletStep();
step1.setName("PreProcessingStep");
step2.setName("ChunkReadWriteStep");
// create two TaskLets
Tasklet tasklet1 = new PreProcessingTasklet();
Tasklet tasklet2; <------ HOW DO I ATTACH MY reader/writer IN THIS TASKLET??
// attach the TaskLet to the step
step1.setTasklet(tasklet1);
step2.setTasklet(tasklet2);
// attach the steps to the job
SimpleJob job = new SimpleJob("MyBatchJob");
job.addStep(step1);
job.addStep(step2);
jobLauncher.run(job, parameters.toJobParameters());
In XML, I can do this like below:
<job id="MyBatchJob">
<step id="preprocessing" next="readWriteStep">
<tasklet ref="PreProcessingTasklet"/>
</step>
<step id="readWriteStep">
<tasklet>
<chunk reader="FlatFileItemReader" writer="DBItemWriter"/>
</tasklet>
</step>
</job>
But how do I do it programatically like above?