Spring Batch参考文档中文版

4.2 Java Config

在Spring 3版本中可以采用java程序来配置应用程序,来替代XML配置的方式。 正如在Spring Batch 2.2.0版本中,批处理任务中可以使用相同的java配置项来对其进行配置。关于Java的基础配置的两个组成部分分别是: @EnableBatchConfiguration 注释和两个builder。

在Spring的体系中 @EnableBatchProcessing 注释的工作原理与其它的带有 @Enable * 的注释类似。在这种情况下,@EnableBatchProcessing 提供了构建批处理任务的基本配置。在这个基本的配置中,除了创建了一个 StepScope 的实例,还可以将一系列可用的bean进行自动装配:

  • JobRepository bean 名称 "jobRepository"
  • JobLauncher bean名称"jobLauncher"
  • JobRegistry bean名称"jobRegistry"
  • PlatformTransactionManager bean名称 "transactionManager"
  • JobBuilderFactory bean名称"jobBuilders"
  • StepBuilderFactory bean名称"stepBuilders"

这种配置的核心接口是 BatchConfigurer。它为以上所述的bean提供了默认的实现方式,并要求在context中提供一个bean,即 DataSource 。数据库连接池由被 JobRepository 使用。

注意 只有一个配置类需要有@ enablebatchprocessing注释。只要有一个类添加了这个注释,则以上所有的bean都是可以使用的。

在基本配置中,用户可以使用所提供的builder factory来配置一个job。下面的例子是通过 JobBuilderFactoryStepBuilderFactory 配置的两个step job 。

@Configuration
@EnableBatchProcessing
@Import(DataSourceCnfiguration.class)
public class AppConfig {

    @Autowired
    private JobBuilderFactory jobs;

    @Autowired
    private StepBuilderFactory steps;

    @Bean
    public Job job() {
        return jobs.get("myJob").start(step1()).next(step2()).build();
    }

    @Bean
    protected Step step1(ItemReader<Person> reader, ItemProcessor<Person, Person> processor, ItemWriter<Person> writer) {
        return steps.get("step1")
            .<Person, Person> chunk(10)
            .reader(reader)
            .processor(processor)
            .writer(writer)
            .build();
    }

    @Bean
    protected Step step2(Tasklet tasklet) {
        return steps.get("step2")
            .tasklet(tasklet)
            .build();
    }
}