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

spring批处理-构造2个读取器和2个处理器和单写入器

况繁
2023-03-14

我的情况是,我得到一个批处理作业将读取数据从两个不同的表和不同的处理。

第一个读取器将进行简单的SQL检索和简单的转换,第二个读取器将进行SQL检索并处理后面的更新和插入逻辑。两个读取器都将返回一个字符串行并写入一个文件。

在spring批处理中,是否可能在一个步骤中有2个读取器和2个处理器,然后传递给1个写入器?

共有1个答案

曾苗宣
2023-03-14

我倾向于法伊兹·平克曼建议的第二种方法。它更接近于spring批处理的工作方式。

第一步

  • 简单sql的读取器->使用标准db读取器
  • 处理器->您自己的简单逻辑实现
  • 写入文件->使用标准FlatFileItemWriter

第二步

我并不完全理解您所说的“处理更新并在后面插入逻辑”的意思。我假设您从一个数据库读取数据,并且基于这些数据,您必须在一个表中执行插入和更新。

  • 读取器用于更复杂的数据->再次使用标准db读取器
  • 处理器->
    • 准备文本文件的字符串
    • 准备新的插入和升级
    • 文本文件的FlatFileItemWriter
    • DBWriter,取决于您的插入和更新需要

    这样,您就有了清晰的事务边界,并且可以确保文件的内容以及插入和更新是“同步的”。

    注意:第一步和第二步可以并行运行

    第三步--读取器使用多资源读取器从两个文件中读取--写入器使用FlatFileItemWriter将两个内容写入一个文件。

    当然,如果您不需要在一个文件中拥有内容,那么您可以跳过步骤3。

    您还可以依次执行步骤1和步骤2,并写入同一个文件。但取决于步骤1和2的执行时间,性能可能不如并行执行步骤1和2并使用第三步来编译数据。

 类似资料:
  • 我有一个批处理步骤 读取器和处理器流程如何工作?读取器是读取块并等待处理器处理它,还是一次读取所有块。

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

  • CompositeItemWriter:当我需要将项目平均地分给Writer时,似乎会将所有读取的项目传递给所有的Writer。 BacktoBackPatternClassifier:我并不真正需要分类器,因为我是均匀地拆分项目。 有没有另一种方式,让一个读者和多个作者? 或者我可以在Writer中手动创建线程?

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

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

  • 我必须使用Spring Batch配置一个作业。是否可以有一个单线程的项目阅读器,但多线程处理器? 在这种情况下,ItemReader将通过从数据库中读取工作项(通过执行预定义的查询)来创建要处理的工作项,每个处理器将并行处理项/块。