JobLauncher
?????????负责启动Job
JobRepository
????????对整个批处理的新增、更新、执行进行记录。
Job
????????封装处理实体,定义过程逻辑。
????????定义一个Job
关键是定义好一个或多个Step
,然后把它们组装好即可。
Step
? ??Step是对Job某个过程的封装,一个Job可以包含一个或多个Step,一步步的Step按特定逻辑执行,才代表Job执行完成
定义
Step
,输入
——
处理
——
输出
,即Item Reader
、Item Processor
和Item Writer
。
- 通过
Item Reader
从文件输入数据- 通过
Item Processor
进行业务处理和数据转换- 通过
Item Writer
写到数据库中去
reader
使用FlatFileItemReader去读cvs文件
BeanWrapperFieldSetMapper<BlogInfo> fieldSetMapper = new BeanWrapperFieldSetMapper<>();
fieldSetMapper.setTargetType(BlogInfo.class);//实体类与csv做映射
return new FlatFileItemReaderBuilder<BlogInfo>()
??????? .name("reader")
???????.delimited()
??????? .names(fields) //String数组-头标签
??????? .fieldSetMapper(fieldSetMapper)//映射
??????? .build();
Step
@Bean
public Step importContractDetailStep() {
??? return new StepBuilder("importContractDetailStep", jobRepository)
??????????? .<BlogInfo,BlogInfo>chunk(CHUNK_SIZE, transactionManager)
??????????? .reader(csvReader())
??????????? .writer(chunk -> {
??????????????? List<BlogInfo> items = (List<BlogInfo>) chunk.getItems();
??????????????? service.saveBatch(items);//写进数据库
??????????? })
??????????? .build();
}
Job
@Bean
public Job importContractDetailJob(Step step) {
??? return new JobBuilder("importContractDetailJob", jobRepository)
??????????? .start(step)
??????????? .build();
}
SELECT * FROM csv INTO OUTFILE 'C:\\note\\csv\\demo.csv' fields terminated by ','