首页 文章

Spring Batch - 构建2个阅读器和2个带单个写入器的处理器

提问于
浏览
0

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

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

在Spring Batch中,可以在1步中有2个读取器和2个处理器然后传递给1个写入器?

2 回答

  • 0

    Faiz Pinkman建议我采用第二种方法 . 它更接近 spring 批量的工作方式 .

    第一步

    • 阅读器为您的简单sql - >使用标准的数据库阅读器

    • processor - >您自己的简单逻辑实现

    • writer到一个文件 - >使用标准的FlatFileItemWriter

    第二步

    我并没有完全理解“过程更新和插入逻辑背后”的含义 . 我假设您从数据库读取数据并基于该数据,您必须在表中执行插入和更新 .

    • 读取器用于更复杂的数据 - >再次使用标准数据库读取器

    • 处理器 - >

    • 准备文本文件的字符串

    • 准备新的插入和更新

    • writer - >使用具有以下委托的复合编写器

    • 您的文本文件的FlatFileItemWriter

    • DbWriter取决于您的插入和更新需求

    这样,您就可以清楚地了解事务边界,并确保文件内容和插入和更新是“同步”的 .

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

    第三步 - 读者使用多源阅读器,从两个文件中读取 - 编写者使用FlatFileItemWriter将两个内容写入一个文件 .

    当然,如果您不需要将内容放在一个文件中,那么您可以跳过第3步 .

    您也可以在彼此之后执行步骤1和2并写入同一文件 . 但是,根据步骤1和2的执行时间,性能可能不如并行执行步骤1和2并使用第三步来复制数据 .

  • 1
    • 您可以编写自定义阅读器代码并在自定义处理器中编写应用程序级逻辑,以根据内容处理输入 . 一步完成两个读者是没有意义的 . spring 批次将如何执行它们?完成读卡器1然后启动读卡器2是没有意义的 . 这与两个不同的步骤相同 .

    • 另一种方法是将读取器的输出放在一个文件中,然后再写一个步骤 . 但我会选择第一种技术 .

相关问题