- 2023-08-13 15:59:38
- 7468 热度
- 0 评论
该系列课程中的示例代码使用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 包
pom.xml配置
<dependency> |
项目结构说明
为了更好的管理代码,根据类对应的职责创建了不同的包:
- launcher: 执行,调用job
- processor: 负责数据的转换与处理
文件读写
使用 FlatFileItemReader,FlatFileItemWriter 帮我们做了什么?
- FlatFileItem 能够以固定长度进行读写(对于大文件尤为重要),开发者不用关注文件的读写流问题
- 对文件读写时能够保证事物
详解 FlatFileItemReader
FlatFileItemReader 是对文件读取的类,一般是对表格数据,或者文本文件数据的处理。该类的以下两个属性是必须要set的
- setResource 指定文件资源的位置:通过ClassPathResource(类所在路径)或者FileSystemResource(文件系统所在路径)来指定要读取的文件
- setLineMapper 行映射:指定行与实体对象之间的映射关系,示例代码使用了DefaultLineMapper
- seEncoding 读取编码格式,默认为
iso-8859-1
- setStrict 严格模式,输入文件不存在会抛出异常,阻断当前job,默认为true
@Bean |
详解 FlatFileItemWriter
FlatFileItemWriter 是对文件的写入类,将批量数据流写入文件,该类使用必须了解下面几个方法的用法:
- setLineAggregator 和 FlatFileItemReader 的setLineMapper方法有着相似之处,setLineAggregator方法是将对象属性聚合为字符串,聚合时根据需要设置分隔符(setDelimiter),以及对象属性对应的字符名称(setFieldExtractor)
- LineAggregator 接口是创建对象属性聚合字符串
- ExtractorLineAggregator 是抽象类实现LineAggregator接口。使用 FieldExtractor将对象属性转换为数组,该类的扩展类负责将数组转换字符串(doAggregate)
- DelimitedLineAggregator 继承 ExtractorLineAggregator。是一种更常使用的聚合方式、将数组用指定符号分割,默认使用逗号
- FormatterLineAggregator 继承 ExtractorLineAggregator。对数组字符串的最大长度,最小长度的校验,以及格式化操作
- PassThroughLineAggregator 实现LineAggregator接口,是一种简单的聚合方式使用对象的.toString()返回值,作为聚合字符串
- RecursiveCollectionLineAggregator 实现LineAggregator接口,将Collection
集合遍历,集合的聚合通过系统行分割符分割,对象字段的聚合使用LineAggregator接口对应的聚合方法是可选择的。
- setResource 是指定输出文件的位置,同样也是必须的,示例代码中使用了new ClassPathResource(“/data/sample-data.txt”) 实际开发中更多的是 new FilePathResource()
- setEncoding 设置编码,默认也是 iso-8859-1
@Bean |
XML文件处理
对xml文件的处理需要引入spring-oxm包,仅对xml的输出进行详解,XML读取类似
对xml写入操作的对象为StaxEventItemWriter,与FlatFileItemWriter的使用类似,StaxEventItemWriter 与 FlatFileItemWriter都有着setResource方法,StaxEventItemWriter默认编码为utf-8
- setRootTagName 设置根节点标签名称
- setMarshaller 指定对象与节点 映射关系
自定义处理器ItemProcessor
ItemProcessor主要负责数据的转换与处理,将读取到的文件 转换为输出文件的对象,所以temProcessor<Person, Person>这里不一定都是Person,实现process方法,实现数据的转换与处理。
public class PersonItemProcessor implements ItemProcessor<Person, Person> { |
整个Job 的处理流程
- 读取csv文件
- 数据处理,转换
- 输出txt文件
- 读取txt文件
- 数据处理,转换
- 输出XML文件
- Spring(403)
- Boot(208)
- Spring Boot(187)
- Spring Cloud(82)
- Java(82)
- Cloud(82)
- Security(60)
- Spring Security(54)
- Boot2(51)
- Spring Boot2(51)
- Redis(31)
- SQL(29)
- Mysql(25)
- Dalston(24)
- IDE(24)
- mongoDB(22)
- MVC(22)
- JDBC(22)
- IDEA(22)
- Web(21)
- CLI(20)
- Alibaba(19)
- SpringMVC(19)
- Docker(17)
- SpringBoot(17)
- Git(16)
- Eclipse(16)
- Vue(16)
- JPA(15)
- Apache(15)
- ORA(15)
- Tomcat(14)
- Linux(14)
- HTTP(14)
- Mybatis(14)
- Oracle(14)
- jdk(14)
- OAuth(13)
- Nacos(13)
- Pro(13)
- XML(13)
- JdbcTemplate(13)
- JSON(12)
- OAuth2(12)
- Data(12)
- int(11)
- Myeclipse(11)
- stream(11)
- not(10)
- Bug(10)
- Hystrix(9)
- ast(9)
- maven(9)
- Map(9)
- Swagger(8)
- APP(8)
- Bit(8)
- API(8)
- session(8)
- Window(8)
- windows(7)
- too(7)
- HTML(7)
- Github(7)
- JavaMail(7)
- Cache(7)
- File(7)
- IntelliJ(7)
- mail(7)
- Server(6)
- nginx(6)
- jar(6)
- ueditor(6)
- ehcache(6)
- UDP(6)
- RabbitMQ(6)
- and(6)
- star(6)
- Excel(6)
- Log4J(6)
- pushlet(6)
- apt(6)
- Freemarker(6)
- read(6)
- WebFlux(6)
- JSP(6)
- Bean(6)
- error(6)
- are(5)
- SVN(5)
- for(5)
- DOM(5)
- Sentinel(5)
- the(5)
- JWT(5)
- rdquo(5)
- PHP(5)
- Struts(5)
- string(5)
- script(5)