Spring批量读取器,处理器和写入器流程

时间:2014-10-30 06:56:54

标签: java batch-processing spring-batch

我有一个批处理步骤                                             

  <batch:step id="read-process-input-file">
  <batch:tasklet>
    <batch:chunk commit-interval=1000
                 reader="item-reader"
                 processor="item-processor"
                 writer="item-writer"
                 skip-limit=1000>

      <batch:skippable-exception-classes>
        <batch:include class="java.lang.Exception"/>
      </batch:skippable-exception-classes>

    </batch:chunk>
  </batch:tasklet>
  <batch:listeners>
    <batch:listener ref="entityOperationExceptionHandler"/>
    <batch:listener ref="filenameListener"/>
    <batch:listener ref="promotionListener"/>
  </batch:listeners>
</batch:step>
  • 读取器和处理器流程如何工作?读取器是否读取一个块并等待处理器处理它,或者它一直读取所有块。

1 个答案:

答案 0 :(得分:4)

调用读者读取一个项目,然后将其传递给处理器。缓存处理器的结果。重复此过程,直到达到提交间隔。然后,缓存的处理器结果将传递给writer,并提交事务。

如果还有更多工作要做,整个序列会重新开始。

所有这一切都发生在一个线程中,因此读取 - 处理 - 读取 - 处理......是按顺序完成的。

更新:我刚刚得知这并非严格属实。我描述的序列肯定对Spring Batch的JSR 352实现有效(这是我正在使用的),并且因为文档为&#34; classic&#34;实现我认为它必须是真的。

然而,这个问题的答案表明存在差异:Spring Batch documentation about chunk-oriented step versus reality?

因此,对于非JSR 352实现,序列正在读取 - 读取 - 读取...处理 - 处理 - 处理...写作