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