春季批处理:从数据库中读取两次

时间:2018-11-21 07:09:40

标签: spring-boot spring-batch

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

我已经在Google上进行了搜索,但没有解决方案,无法读取两次并批量写入一次。

一种方法是分块读取,在内部流程中,我们获取id并访问数据库。但是处理一次将花费单个数据,这是最耗时的。

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

需要知道什么是一次又一次地阅读两次的最佳方法。

1 个答案:

答案 0 :(得分:0)

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

  

一种方法是分块读取,在内部流程中,我们获取id并访问数据库。但是处理一次将花费单个数据,这是最耗时的。

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

  

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

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

希望这会有所帮助。

相关问题