该系列课程中的示例代码使用 springBatch 版本为 3.0.7; 讲解可能会讲一些 4.0.X 的特性
示例代码地址: https://git.oschina.net/huicode/springbatch-learn
在这里说到 FlatFile 的时候,其实 XML,CSV,TXT 三种文件格式中 XML 是不属于 FlatFile 的,XML 在 Batch 中是属于 StaxEvent,但是本章主要讲述 SpringBatch 对于文件的读写,所以放到一起说明。
本文主要讲解通过 SpringBatch 来处理文本格式的文件,在实际的业务中也许文本文件转 DB data 或者 DB data 转文本文件的情形更多。
说明:在 spring 官方文档中的说明都是基于 xml 配置的方式来实现 ItemReader、ItemWriter、Job、Step 的配置的,为了符合 springBoot 的配置方式,示例代码都是配置代码实现的。
使用 springBatch 对于 xml 文件进行读写 操作时需要引入 spring-oxm 包
- <dependency>
- <groupId>
- org.springframework.boot
- </groupId>
- <artifactId>
- spring-boot-starter-batch
- </artifactId>
- </dependency>
- <dependency>
- <groupId>
- org.springframework
- </groupId>
- <artifactId>
- spring-oxm
- </artifactId>
- <version>
- 4.3.8.RELEASE
- </version>
- </dependency>
- <dependency>
- <groupId>
- mysql
- </groupId>
- <artifactId>
- mysql-connector-java
- </artifactId>
- <scope>
- runtime
- </scope>
- </dependency>
为了更好的管理代码,根据类对应的职责创建了不同的包:
使用 FlatFileItemReader,FlatFileItemWriter 帮我们做了什么?
FlatFileItemReader 是对文件读取的类,一般是对表格数据,或者文本文件数据的处理。该类的以下两个属性是必须要 set 的
- iso-8859-1
- @Bean publicFlatFileItemReader < Person > csvItemReader() {
- FlatFileItemReader < Person > csvItemReader = new FlatFileItemReader < >();
- csvItemReader.setResource(new ClassPathResource("data/sample-data.csv"));
- csvItemReader.setLineMapper(new DefaultLineMapper < Person > () {
- {
- setLineTokenizer(new DelimitedLineTokenizer() {
- {
- setNames(new String[] {
- "name",
- "age"
- });
- }
- });
- setFieldSetMapper(new BeanWrapperFieldSetMapper < Person > () {
- {
- setTargetType(Person.class);
- }
- });
- }
- });
- return csvItemReader;
- }
FlatFileItemWriter 是对文件的写入类,将批量数据流写入文件,该类使用必须了解下面几个方法的用法:
- @Bean publicFlatFileItemWriter < Person > txtItemWriter() {
- FlatFileItemWriter < Person > txtItemWriter = new FlatFileItemWriter < >();
- txtItemWriter.setAppendAllowed(true);
- txtItemWriter.setEncoding("UTF-8");
- txtItemWriter.setResource(new ClassPathResource("/data/sample-data.txt"));
- txtItemWriter.setLineAggregator(new DelimitedLineAggregator < Person > () {
- {
- setDelimiter(",");
- setFieldExtractor(new BeanWrapperFieldExtractor < Person > () {
- {
- setNames(new String[] {
- "name",
- "age"
- });
- }
- });
- }
- });
- return txtItemWriter;
- }
对 xml 文件的处理需要引入 spring-oxm 包,仅对 xml 的输出进行详解,XML 读取类似
对 xml 写入操作的对象为 StaxEventItemWriter,与 FlatFileItemWriter 的使用类似,StaxEventItemWriter 与 FlatFileItemWriter 都有着 setResource 方法,StaxEventItemWriter 默认编码为 utf-8
ItemProcessor 主要负责数据的转换与处理,将读取到的文件 转换为输出文件的对象,所以 temProcessor
- public class PersonItemProcessorimplements ItemProcessor<Person,Person>{
- @Override
- publicPersonprocess(Person person)throwsException{
- person.setAge(person.getAge() + 1);
- person.setName(person.getName() + "-_-");
- return person;
- }
- }
如果您有任何想法或问题需要讨论或交流,可进入交流区发表您的想法或问题。
来源: http://www.tuicool.com/articles/RFJrimr