美文网首页
《spring batch 批处理框架》第6、7、8章

《spring batch 批处理框架》第6、7、8章

作者: 沉寂之舟 | 来源:发表于2018-03-06 00:03 被阅读251次

第6章 读数据ItemReader

这章开始可以说是全书核心部分了,6,7,8三章不仅篇幅多,也是掌握spring batch框架最重要的一个部分

  1. ItemReader
    在Step中对资源的读处理,并转化为目标领域模型对象。
    a. ItemReader接口
    b. ItemStreamReader接口
    c.


    spring-batch-chunk-readers.png
  2. Flat格式文件:FlatFileItemReader

    spring-batch-flate-type.png

    a. 分隔符类型、定长类型、Json格式、记录跨多行格式、交替记录。
    b. FlatFileItemReader配置要点:
    1)通过引用RecordSeparatorPlicy,LineMapper、LineCallbackHandler实现吧flat文件中的记录转化为java对象。
    2)

    spring-batch-FlatFileItemReader-relation.png
    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区分
  3. XML格式文件
    a. Stax解析,在于拉模式的流解析。
    b. spring OXM:由spring提供的xml与java对象自己互相转换。

  4. 读多文件
    MultiResouceItemReader:通过代理delegate(每个文件的处理step)和Resources(资源列表)

  5. 读数据库

    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代码阅读
  6. 读JMS队列(略)

  7. 服务服务:
    通过实现对现有服务的包装service,并装备到ItemREaderAdapter是的现有的IT资产。

  8. 自定义ItemReader:
    a.不可重启:实现ItemReader接口即可
    b.可重启:实现ItemStreamReader接口即可

  9. 拦截器
    a. 拦截器接口
    b. 拦截器异常(onReadError)
    c. 拦截器执行顺序,所有的都同一个策略
    d. 注解方式(书中大量使用了xml方式,注解方式介绍不多)
    e. Merge:父子融合,先执行父亲的动作,再执行儿子的。

第7章 读数据ItemWriter

  1. ItemWriter:
    在Step中对资源的读处理,并转化为目标领域模型对象。
    a. 接口write()方法
    b. ItemStreamWriter接口,有上下文,可重启的(由于DB操作是按照chunk进行事务管理的,所以都不可以重启)
    c. spring-batch-writers.png
  2. Flat格式文件:最为复杂的一个实现。
    a. FlatFileItemWriter: 类关系图,关键接口,属性,配置demo
    b. Linaggregator:核心工具属性,有5个默认的实现。
    c. FiledExtractor:直接转换为object数组,再根据数组转换为字符串输出。BeanWapperFiledExtractor+PassThroughFieldExtractor.
    d. 回调:头回调、尾回调(写页头,页尾的地方)
  3. XML文件:Stax
  4. 多文件:
    默认是根据条数写到不同的文件(MultiResourceItemWriter),可根据不同情况进行扩展
  5. 写DB:


    spring-batch-db-writers.png
  6. 写JMS队列(略过)
  7. 组合写
  8. 路由写
    不同的写策略,组合写是一个输出重复写到不同文件,路由写是一个输出根据条件只写入一个文件
  9. 邮件发送:配合mailSender进行
  10. 服务服务:与reader类似,封装在一个桥接service中
  11. 自定义ItemWriter(略)
  12. 拦截器器:和Reader的接口不同,但是配置的地方是一样的。

第8章 ItemProcessor

Reader和Writer解决了读写的问题,Processor就能集中精力解决业务逻辑的处理。

  1. ItemProcessor:
    a. 接口:ItemProcessor<I,O>,类似stream的map变化,从输入领域模型I转换为输出领域模型O
spring-batch-reade-process-write.png

b. 系统提供的处理组件图 :


spring-batch-processors.png
  1. 数据转换:
    部分转换、类型转换两个Demo说明自定义Processor的实现和配置。
  2. 数据过滤:
    返回Null即可过滤,异常跳过配置
  3. 数据校验:
    通过实现Validator接口,并配置ValidatingItemProcessor
  4. 组合处理器:
    一个处理器的输出,作为下一个处理器的输入
  5. 服务服用:
    类似前面的用法,使用桥接service实现
  6. 拦截器:与前面类似用法,略。
参考文章

一篇文章全面解析大数据批处理框架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

相关文章

网友评论

      本文标题:《spring batch 批处理框架》第6、7、8章

      本文链接:https://www.haomeiwen.com/subject/evukfftx.html