当前位置: 首页 > 知识库问答 >
问题:

Spring Batch--如何使一个步骤从另一个步骤的写入器中读取并行步骤?

党星鹏
2023-03-14

我对Spring批处理框架相当陌生。

我在一个作业中创建了两个步骤(我们称之为步骤1和步骤2)。我想把它们并行运行。不仅如此,step2的IteamReader还应该使用step1的itemwriter。

我的第一个问题是,在Spring批量中是否有可能做到这一点?如果是,怎么做?

其次,如果这不可能,还有什么工作可以做呢?

谢了。

共有1个答案

阳修永
2023-03-14

您可以使用 一次运行两个步骤来破解它。步骤1将写入步骤2可以从中读取的队列。这里的关键是确保步骤2的读取器在MessageConsumer上有适当的超时时间,以便它能够等待足够长的时间,以便步骤1将一个块写入队列。

<split id="splitStep" task-executor="asyncTaskExecutor" >
    <flow>
        Step 1: reader -> processor -> writer (to queue)
    </flow>
    <flow>
        Step 2: reader (from queue) -> processor -> final writer
    </flow>
</split>

也就是说,有什么理由不能仅仅使用复合处理器吗?

 Step 1: reader -> processor 1 -> processor 2 -> writer

或者更好的是,你需要把它分块吗?它可能是Spring集成之类的更好的用例。

Reader: reads source, returns List<SourceItem>
Processor 1: List<SourceItem> in, perform transformations, List<TransformedItem> out
Processor 2: List<TransformedItem> in, additional transformations, List<FinalItem> out
Writer: List<List<FinalItem>> in, unpack the list, write to final destination

如果要这样做,您将绕过框架通常的工作方式,因此需要将提交间隔设置为1(因为您只希望读取器返回1个列表),并通过更改列表中项的#来确定读取器中的块大小。

 类似资料: