在春季批处理中动态配置作业



是否可以在spring-batch中动态配置Job

这就是我想做的。我创建了几个不同的ItemReaderItemWriter如下所示:

  • FlatFileItemReader
  • DBItemReader
  • FlatFileItemWriter
  • DBItemWriter
  • .....
  • XMLItemWriter

我希望能够在创建批处理作业时动态混合和匹配它们。例如,假设我需要一份包含 2 个步骤的工作。第一步包含用于预处理Tasklet。第二步将有一个使用我的读取器/写入器进行基于块的数据处理Tasklet。像这样:

// 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());

在XML中,我可以像下面这样做:

<job id="MyBatchJob">
    <step id="preprocessing" next="readWriteStep">
        <tasklet ref="PreProcessingTasklet"/>
    </step>
    <step id="readWriteStep">
        <tasklet>
            <chunk reader="FlatFileItemReader" writer="DBItemWriter"/>
        </tasklet>
    </step>
</job>

但是我如何像上面一样以编程方式做到这一点呢?

Spring Batch 提供了基于 Java 的配置,用于通过 java 代码而不是 XML 构建作业。 通过使用提供的构建器,您可以根据需要动态构建作业。 我强烈建议使用此方法而不是手动连接ChunkOrientedTasklet,因为该特定Tasklet发生了很多事情。

开始使用Spring Batch的java配置的最佳位置是在Spring Batch指南:http://spring.io/guides/gs/batch-processing/。 这是一个15分钟的演练,介绍如何使用Spring Boot和java配置等工具开始使用Spring Batch。

最新更新