我有一个批处理步骤
<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>
答案 0 :(得分:4)
调用读者读取一个项目,然后将其传递给处理器。缓存处理器的结果。重复此过程,直到达到提交间隔。然后,缓存的处理器结果将传递给writer,并提交事务。
如果还有更多工作要做,整个序列会重新开始。
所有这一切都发生在一个线程中,因此读取 - 处理 - 读取 - 处理......是按顺序完成的。
更新:我刚刚得知这并非严格属实。我描述的序列肯定对Spring Batch的JSR 352实现有效(这是我正在使用的),并且因为文档为&#34; classic&#34;实现我认为它必须是真的。
然而,这个问题的答案表明存在差异:Spring Batch documentation about chunk-oriented step versus reality?
因此,对于非JSR 352实现,序列正在读取 - 读取 - 读取...处理 - 处理 - 处理...写作