0

我可以使用单个ItemReader和多个子步骤编写 Spring Batch 步骤,每个子步骤都有一个ItemProcessor后跟一个ItemWriter吗?

我正在尝试实现这样的目标:

ItemReader ---> item ---> ItemProcessor#1 ---> ItemProcessor#2
                                 |                    |
                                 v                    v
                            ItemWriter#1         ItemWriter#2

补充笔记

  • 为避免不一致,我不希望将项目阅读两次。
  • 第二个ItemProcessor需要过滤掉一些项目,这些项目应该由第一个编写ItemWriter,而不是由第二个编写。

我相信这个问题与Spring Batch 不同:一个阅读器,多个处理器和编写器,因为我需要按顺序处理项目,而不是并行处理。

4

1 回答 1

1

Spring Batch 提供的面向块的处理模型基于两个关键概念:

  • ChunkProvider:通过委托给ItemReader
  • ChunkProcessor: 通过委托ItemProcessor和处理数据块ItemWriter

默认情况下,Spring Batch 为每个接口提供了两个实现:SimpleChunkProvider/FaultTolerantChunkProviderSimpleChunkProcessor/ FaultTolerantChunkProcessor(Spring Batch 提供了远程分区/分块的其他实现,但这超出了这里的范围)。默认情况下,每个组件都使用“简单”版本。如果默认行为不够或无法根据您的需要进行配置,您可以提供您的自定义组件。请看一下常见问题解答中的这个问题:Spring Batch 关于使用灵活策略和默认实现的理念是什么?这是一段摘录:

We expect clients to create their own more specific strategies that can be
plugged in to control things like commit intervals (CompletionPolicy),
rules about how to deal with exceptions (ExceptionHandler), and many others.

因此,要回答您的问题,您可以提供一个自定义实现,ChunkProcessor根据需要在管道中调用多个处理器/编写器。使用这种方法,您将只阅读一次项目,因为您可以继续使用默认的ChunkProvider.

于 2021-03-30T08:23:40.543 回答