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

在同一Spring批处理步骤中有多个ItemProcessor和ItemWriter

湛文乐
2023-03-14

我能用一个ItemReader和多个子步骤编写一个Spring批处理步骤吗?每个步骤后面都有一个ItemProcessor和一个ItemWriter?

我正在努力实现这样的目标:

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

补充说明

  • 为了避免前后矛盾,我宁愿不读两遍

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

共有1个答案

潘皓
2023-03-14

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

  • ChunkProvider:通过委托给ItemReader
  • ChunkProcessor:通过委托给ItemProcessorItemWriter

默认情况下,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

 类似资料:
  • 我目前正在处理一批数据,这些数据来自一个拥有数百万行的大型SQL数据库。 它在处理器中执行一些处理,包括通过带有连接的大型sql查询对从Reader检索到的行进行分组。 编写器将结果写入另一个表。 问题是此Batch存在性能问题,因为Sql选择查询需要大量时间并且步骤不会在多线程中执行。 因此,我希望在多标题中运行它们,但问题是,这些步骤通过计算具有相同类型的所有行的总数来对行进行分组。 因此,如

  • 给定一个使用分区的Spring批处理作业,是否可能有多个分区步骤? 例如: 在上述示例中,是否可以将另一个添加到(最好不需要为每个分区步骤提供分区器)?如果没有,是否有其他方法来配置多个步骤,这些步骤将针对每个分区逐个执行?

  • 我正在编写一个spring批处理作业,在其中一个步骤中,我为处理器编写了以下代码: null 欢迎任何暗示。

  • 我正在做一个项目,我将使用Spring批处理和Spring集成来创建工作流系统。这个工作流系统应该能够从队列中读取消息,这实际上是来自客户端的作业请求,根据作业请求类型,我需要调用一些7-8系统。 每个系统从某个位置读取输入文件(通常是一个集中存储系统,其中所有输入文件都存储在客户提交的文件中),对其进行处理,然后将其传递给下一个系统,最终我应该能够响应客户端,例如SUCCESS如果它被所有系统成

  • Spring批处理-需要帮助以并行和多个节点运行批处理作业的独立步骤。一个spring批处理作业(JobA),包含三个步骤[步骤A(在compute1中)和步骤B(在compute2中)以及步骤C] StepA和StepB是独立的步骤,占用大量内存,因此不能在同一计算节点/JVM上并行运行。要使StepC同时启动(StepA和StepB),需要成功完成。我不想为了节省时间而依次执行步骤A和步骤B。

  • null null 任何解决问题的帮助/指针都是非常感谢的。 谢谢,哈尔·克里尚