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

Spring批处理读取器、处理器和写入器流

符允晨
2023-03-14

我有一个批处理步骤

  <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>
  • 读取器和处理器流程如何工作?读取器是读取块并等待处理器处理它,还是一次读取所有块。

共有1个答案

夏侯元忠
2023-03-14

读取器被调用以读取一个项目,然后该项目被传递给处理器。处理器的结果被缓存。这将重复进行,直到达到提交间隔。然后将缓存的处理器结果传递给writer,并提交事务。

如果有更多的工作要做,整个序列重新开始。

这一切都发生在一个线程中,所以读-处理-读-处理……是按顺序进行的。

更新:我刚刚得知严格来说这不是真的。我描述的序列对于Spring Batch的JSR352实现(这就是我正在使用的)当然是有效的,并且由于文档对于“经典”实现也有同样的说明,我假设它一定是正确的。

然而,这个问题的答案表明有一个区别:关于面向块的step的Spring批处理文档与现实?

因此,对于非JSR352实现,顺序是读-读-读...处理-处理-处理...写

 类似资料:
  • 我有“N”没有的。客户/客户。对于每个客户/客户,我需要从数据库(读取器)中获取记录,然后我必须处理(处理器)客户/客户的所有记录,然后我必须将记录写入文件(写入器)。 如何将spring批处理作业循环N次?

  • 根据已接受的答案代码,对该代码的以下调整对我起作用: 我已经将这个问题更新到了一个可以正确循环的版本,但是由于应用程序将扩展,能够处理并行是很重要的,我仍然不知道如何在运行时用javaconfig动态地做到这一点... 基于查询列表(HQL查询),我希望每个查询都有一个读取器-处理器-写入器。我当前的配置如下所示: 工单 处理机 作家 目前,该过程对于单个查询来说工作得很好。然而,我实际上有一个查

  • 我刚开始使用Spring批处理,我有一个特殊问题。我希望使用从3个不同的jpa查询中获取结果,并分别处理它们,然后使用将它们写入一个统一的XML文件。 对于eg,生成的XML看起来像是,

  • 项目读取器将数据从特定源代码读入Spring批处理应用程序,而项目写入器将数据从Spring Batch应用程序写入特定目标。 Item处理器是一个包含处理代码的类,该代码处理读入spring批处理的数据。 如果应用程序读取条记录,则处理器中的代码将在每条记录上执行。 块(chunk)是该tasklet的子元素。 它用于执行读取,写入和处理操作。 可以在如下所示的步骤中配置使用此元素的读取器,写入

  • (A)ItemReader[第一输入]->(A)ItemProcessor[第一输入]->(B)ItemReader[使用处理过的输入从另一个源收集第二输入]->(B)ItemProcessor[使用处理过的第一输入和第二输入]->{repeat B}->ItemWriter(最终结果) 有没有人知道如何在Spring批处理中这样做?多谢了。

  • 我的情况是,我得到一个批处理作业将读取数据从两个不同的表和不同的处理。 第一个读取器将进行简单的SQL检索和简单的转换,第二个读取器将进行SQL检索并处理后面的更新和插入逻辑。两个读取器都将返回一个字符串行并写入一个文件。 在spring批处理中,是否可能在一个步骤中有2个读取器和2个处理器,然后传递给1个写入器?