【问题标题】:spring batch : Read Twice one after other from databasespring batch:从数据库中依次读取两次
【发布时间】:2018-11-21 07:09:40
【问题描述】:

我需要知道从 chunk(100) 中的一个数据库读取数据的最佳方法是什么,并根据该数据从其他数据库服务器读取数据。 示例:从一个数据库服务器获取 id,并根据该 id 从其他数据库服务器获取数据。

我在谷歌上搜索过,但没有找到两次读取和批量写入一次的解决方案。

一种方法是分块读取,在进程内部我们获取 id 并访问数据库。但是过程会一次获取单个数据,这是最耗时的。

第二种方法是进行两个不同的步骤,但在此我们无法将 id 列表共享给其他步骤,因为我们只能将少量数据共享给其他步骤。

需要知道什么是接连阅读两遍的最佳方法。

【问题讨论】:

    标签: spring-boot spring-batch


    【解决方案1】:

    没有最佳方法,因为它取决于用例。

    一种方法是分块读取,在进程内部我们获取 id 并访问数据库。但是过程会一次获取单个数据,这是最耗时的。

    这种方法是一种称为“驱动查询模式”的常见模式,在参考文档的Common Batch Patterns 部分中有详细说明。这个想法是阅读器只读取 ID,处理器通过使用该项目的附加数据查询第二个服务器来丰富该项目。当然,这将为每个项目生成一个查询,但这无论如何都是您想要的,除非您希望您的第二个查询发送块中所有 ID 的列表。在这种情况下,您可以在 org.springframework.batch.core.ItemWriteListener#beforeWrite 中执行此操作,您可以在其中获取要写入的所有项目的列表。

    第二种方法是进行两个不同的步骤,但在此我们无法将 id 列表共享给其他步骤,因为我们只能将少量数据共享给其他步骤。

    是的,不建议通过执行上下文共享大量数据,因为此执行上下文将在步骤之间持久化。所以我认为这对你来说不是一个好的选择。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-15
      • 2018-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多