在读过this article关于Spring-Batch
中扩展和并行处理的可能性之后,我们想知道,Spring批处理的开箱即用行为是什么?
假设我们的工作有读者,5个步骤和一名作家。
Spring-batch会读取一项,然后通过所有5个步骤,将其写入,然后再转到下一项吗?像巨型for loop
一样?
还是有些并行性,所以当将项目A移至步骤2时,将项目B读取并处理至步骤1?
答案 0 :(得分:0)
我认为您误解了Spring Batch的工作原理。首先,让我进入并行性。
Spring Batch中基于块的步骤包括一个ItemReader
,一个可选的ItemProcessor
和一个ItemWriter
。这些显然都支持合成(Spring Batch提供了一些在ItemProcessor
和ItemWriter
阶段都使用合成的组件)。在该步骤中,Spring Batch读取项目,直到满足给定条件(通常为块大小)为止。然后遍历该列表,将每个项目传递到ItemProcessor
。最后,来自ItemProcessor
调用的所有结果的列表在单个调用中传递给ItemWriter
。阅读一次,然后执行多个步骤,然后编写的概念实际上并不是Spring Batch的工作原理。我们得到的最接近的是单个ItemReader
,然后使用组合创建一个ItemProcessor
调用链,然后是对ItemWriter
的单个调用。
TaskExecutor
抽象在不同的线程中执行的。TaskExecutor
抽象来再次并行控制多个独立步骤,以控制使用的thead。ItemProcessor
的每次调用都在其自己的线程中被调用。结果Future
被传递到AsyncItemWriter
,后者解开Future
并保持结果。