除了XML配置外,Spring Batch还支持使用Java代码进行配置。Java配置可以使配置文件更加简洁和易于维护。下面是一个使用Java配置的示例:
@Configuration
@EnableBatchProcessing
public class BatchConfiguration {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Bean
public FlatFileItemReader<MyObject> itemReader() {
FlatFileItemReader<MyObject> reader = new FlatFileItemReader<>();
reader.setResource(new ClassPathResource("input.csv"));
reader.setLineMapper(new DefaultLineMapper<MyObject>() {{
setLineTokenizer(new DelimitedLineTokenizer() {{
setNames(new String[]{"id", "name", "age"});
}});
setFieldSetMapper(new BeanWrapperFieldSetMapper<MyObject>() {{
setTargetType(MyObject.class);
}});
}});
return reader;
}
@Bean
public MyItemProcessor itemProcessor() {
return new MyItemProcessor();
}
@Bean
public FlatFileItemWriter<MyObject> itemWriter() {
FlatFileItemWriter<MyObject> writer = new FlatFileItemWriter<>();
writer.setResource(new ClassPathResource("output.csv"));
writer.setLineAggregator(new DelimitedLineAggregator<MyObject>() {{
setDelimiter(",");
setFieldExtractor(new BeanWrapperFieldExtractor<MyObject>() {{
setNames(new String[]{"id", "name", "age"});
}});
}});
return writer;
}
@Bean
public Step myStep() {
return stepBuilderFactory.get("myStep")
.<MyObject, MyObject>chunk(10)
.reader(itemReader())
.processor(itemProcessor())
.writer(itemWriter())
.build();
}
@Bean
public Job myJob() {
return jobBuilderFactory.get("myJob")
.incrementer(new RunIdIncrementer())
.flow(myStep())
.end()
.build();
}
}
在这个示例中,我们使用了@Configuration和@EnableBatchProcessing注解来标识这个类是一个配置类,并启用了Spring Batch的批处理功能。我们还注入了JobBuilderFactory和StepBuilderFactory实例,以便我们可以使用它们创建Job和Step。
在itemReader、itemProcessor和itemWriter方法中,我们使用@Bean注解定义了三个组件,并设置了它们的属性。与XML配置类似,我们使用FlatFileItemReader、FlatFileItemWriter、DefaultLineMapper、DelimitedLineTokenizer、BeanWrapperFieldSetMapper、DelimitedLineAggregator和BeanWrapperFieldExtractor等类来定义ItemReader、ItemProcessor和ItemWriter,并设置了相应的输入和输出文件。
在myStep方法中,我们使用stepBuilderFactory创建了一个名为myStep的Step,并使用chunk方法定义了一个Chunk-oriented任务,并在其中引用了itemReader、itemProcessor和itemWriter。与XML配置类似,我们还设置了commit-interval为10。
最后,在myJob方法中,我们使用jobBuilderFactory创建了一个名为myJob的Job,并在其中包含了myStep。我们还使用RunIdIncrementer类为Job配置了一个增量器,以确保每次运行Job时都会生成新的实例。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。