第6章 读数据ItemReader
这章开始可以说是全书核心部分了,6,7,8三章不仅篇幅多,也是掌握spring batch框架最重要的一个部分
-
ItemReader
在Step中对资源的读处理,并转化为目标领域模型对象。
a. ItemReader接口
b. ItemStreamReader接口
c.
spring-batch-chunk-readers.png -
Flat格式文件:FlatFileItemReader
spring-batch-flate-type.pnga. 分隔符类型、定长类型、Json格式、记录跨多行格式、交替记录。
spring-batch-FlatFileItemReader-relation.png
b. FlatFileItemReader配置要点:
1)通过引用RecordSeparatorPlicy,LineMapper、LineCallbackHandler实现吧flat文件中的记录转化为java对象。
2)
FlatFileReader类关系图,接口、类说明,关键属性。
3) XML配置
c. RecoredSeparatorPolicy:
1) 接口定义: isEndofRecord()、postProcess(),preprocess()三个方法
2) 系统实现
d. LineMapper:
1) 接口定义:
mapLine()方法,返回领域模型<T>类型。
2) 系统实现
e. DefaultLineMapper:
实际又委托给LineTokenizer、FieldSetMapper去处理
1) 线转化为FieldSet对象,在转化为领域对象
2) 配置的xml阅读
3) LineTokenizer和FieldSet接口
4) DelimitedLineTokenizer:解析分隔符字段的文件,传入分隔符,names,由tokenize()方法解析
5) FixedLengthTokenizer:解析定长字段的文件,传入columns字段长度,names字段名
6) FieldSetMapper:吧Fieldset转化为领域对象,实现mapFIeldSet()方法
7)BeanWapperFiledSetMapper:在prototypeBeanName中指明需要映射的对象,利用spring的反射工具自动进行“同名”赋值
f. LineCallbackHander:在LinesToskip跳过时,会触发handleLine()操作。
g. 读分隔符文件案例
h. 读定长文件案例
i. 读json文件案例(依赖codehaus.jackson)
j. 对记录跨多行文件案例,这个需要自定义SepartorPolicy
k. 读混合记录案例,利用PatternMatch区分 -
XML格式文件
a. Stax解析,在于拉模式的流解析。
b. spring OXM:由spring提供的xml与java对象自己互相转换。 -
读多文件
MultiResouceItemReader:通过代理delegate(每个文件的处理step)和Resources(资源列表) -
读数据库
spring-batch-db-readers.png
包括JDBC和ORM方式,有基于游标和基于分页两种组件
a.JdbcCursorItemReader:
1) 传入PreparedStatement(sql语句)查询出Result,再用RowMapper生成java对象。
2) 默认实现:BeanPropertyRowMapper,ClumnMapRowMapper。
3) 使用自定义的RowMapper
4)SQL参数绑定:使用ListPreparedStatementSetter把参数设置到sql中
b.HibernateCursorItemReader:
c.StoredProcedureItemReader:
d.JdbcPagingItemReader:
e.HibernatePagingItemReader:
f.JpaPagingItemReader:
h.IbatisPagingItemReader:已废弃。
其他几个套路也是一个,从配置的不同介绍,然后再通过一个完整的demo进行说明
这部分介绍的十分详细,也都有对应的demo代码阅读 -
读JMS队列(略)
-
服务服务:
通过实现对现有服务的包装service,并装备到ItemREaderAdapter是的现有的IT资产。 -
自定义ItemReader:
a.不可重启:实现ItemReader接口即可
b.可重启:实现ItemStreamReader接口即可 -
拦截器
a. 拦截器接口
b. 拦截器异常(onReadError)
c. 拦截器执行顺序,所有的都同一个策略
d. 注解方式(书中大量使用了xml方式,注解方式介绍不多)
e. Merge:父子融合,先执行父亲的动作,再执行儿子的。
第7章 读数据ItemWriter
- ItemWriter:
在Step中对资源的读处理,并转化为目标领域模型对象。
a. 接口write()方法
b. ItemStreamWriter接口,有上下文,可重启的(由于DB操作是按照chunk进行事务管理的,所以都不可以重启)
c. spring-batch-writers.png - Flat格式文件:最为复杂的一个实现。
a. FlatFileItemWriter: 类关系图,关键接口,属性,配置demo
b. Linaggregator:核心工具属性,有5个默认的实现。
c. FiledExtractor:直接转换为object数组,再根据数组转换为字符串输出。BeanWapperFiledExtractor+PassThroughFieldExtractor.
d. 回调:头回调、尾回调(写页头,页尾的地方) - XML文件:Stax
- 多文件:
默认是根据条数写到不同的文件(MultiResourceItemWriter),可根据不同情况进行扩展 -
写DB:
spring-batch-db-writers.png - 写JMS队列(略过)
- 组合写
- 路由写
不同的写策略,组合写是一个输出重复写到不同文件,路由写是一个输出根据条件只写入一个文件 - 邮件发送:配合mailSender进行
- 服务服务:与reader类似,封装在一个桥接service中
- 自定义ItemWriter(略)
- 拦截器器:和Reader的接口不同,但是配置的地方是一样的。
第8章 ItemProcessor
Reader和Writer解决了读写的问题,Processor就能集中精力解决业务逻辑的处理。
- ItemProcessor:
a. 接口:ItemProcessor<I,O>,类似stream的map变化,从输入领域模型I转换为输出领域模型O
b. 系统提供的处理组件图 :
spring-batch-processors.png
- 数据转换:
部分转换、类型转换两个Demo说明自定义Processor的实现和配置。 - 数据过滤:
返回Null即可过滤,异常跳过配置 - 数据校验:
通过实现Validator接口,并配置ValidatingItemProcessor - 组合处理器:
一个处理器的输出,作为下一个处理器的输入 - 服务服用:
类似前面的用法,使用桥接service实现 - 拦截器:与前面类似用法,略。
参考文章
一篇文章全面解析大数据批处理框架Spring Batch
http://geek.csdn.net/news/detail/128641
从头认识SpringBatch批处理框架
http://blog.csdn.net/u011659172/article/category/6105368
Spring Batch参考文档中文版(3.0-不全)
https://kimmking.gitbooks.io/springbatchreference/content/
Spring Batch - Reference Documentation
https://docs.spring.io/spring-batch/trunk/reference/html/index.html
网友评论