美文网首页
《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