Spring Batch 框架重温

一个Batch(批处理)过程由一个Job(作业)组成。这个实体封装了整个批处理过程。
一个Job(作业)可以由一个或多个Step(步骤)组成。在大多数情况下,一个步骤将读取数据(通过ItemReader),处理数据(使用ItemProcessor),然后写入数据(通过ItemWriter)。
JobLauncher处理启动一个Job(作业)。
最后,JobRepository存储关于配置和执行的Job(作业)的元数据。
摘自:https://www.cnblogs.com/liululee/p/11124383.html
核心代码:
@Configuration
public class SampleJobConfigure {
@Bean
public Job helloWorlJob(JobBuilderFactory jobBuilders,
StepBuilderFactory stepBuilders) {
return jobBuilders.get("helloWorldJob")
.start(helloWorldStep(stepBuilders)).build();
}
@Bean
public Step helloWorldStep(StepBuilderFactory stepBuilders) {
return stepBuilders.get("helloWorldStep")
.<Person, String>chunk(10).reader(reader())
.processor(processor()).writer(writer()).build();
}
@Bean
public FlatFileItemReader<Person> reader() {
return new FlatFileItemReaderBuilder<Person>()
.name("personItemReader")
.resource(new ClassPathResource("csv/persons.csv"))
.delimited().names(new String[] {"firstName", "lastName"})
.targetType(Person.class).build();
}
@Bean
public PersonItemProcessor processor() {
return new PersonItemProcessor();
}
@Bean
public FlatFileItemWriter<String> writer() {
return new FlatFileItemWriterBuilder<String>()
.name("greetingItemWriter")
.resource(new FileSystemResource(
"target/test-outputs/greetings.txt"))
.lineAggregator(new PassThroughLineAggregator<>()).build();
}
}
启动job
Job job = jobRegistry.getJob(jobName); jobLauncher.run(job, paramBuilder.toJobParameters()); //JobExecution jobExecution = jobLauncherTestUtils.launchJob();
如果是Springboot项目,自动配置在加上注解@EnableBatchProcessing 后会在项目启动时 自动运行所有job, 如果想要制定job执行配置spring.batch.job.names 就可以了
也可以自定义运行CommandlineRunner 去制定运行jobs
https://docs.spring.io/spring-boot/docs/1.2.0.M1/reference/html/howto-batch-applications.html
浙公网安备 33010602011771号