Spring batch -preload chunk 相关数据

Spring batch -preload chunk related data

我正在从文件中读取记录,我需要它们与数据库中已有的记录相关联。

相关的数据库记录在文件的行内指定(有该记录的id)。读取的一项应在数据库中有一条相关记录。由于可能存在的性能问题,我不想从每个项目的数据库中读取单个记录。

因此我想从数据库中读取与块中当前处理的行相关的所有相关记录。有办法吗?或者有没有办法访问作为单个块的一部分处理的所有项目(无论如何它们都应该在内存中)?

我知道我可以加载所有可能需要的记录,但假设数据库中有数百万条这样的记录,而我只处理几千行的文件。

这显然是一个自定义案例 reader - 请记住 Spring Batch 只是一个框架,它试图为您的代码和基础架构提供结构,但不会对逻辑施加太多限制或者你自己写的代码,只要它符合接口。

  1. 话虽如此,如果您不转换 ItemProcessor 中的任何阅读项目,List 的阅读项目应该在 ItemWriter 和那些是作为块的一部分从文件中读取的项目。

  2. 如果您的文件真的很小,您可以使用自定义文件 reader / 解析器一次性读取所有项目,而不是 API 提供 reader & 然后一次只能从数据库中加载那些项目

  3. 您可以使用两步作业,而不是单步作业,其中您的第一步转储file read records to a DB table & 在第二步中你做 SQL 加入这两个 tables 以找出共同的记录。

这些只是广泛的想法,具体实施取决于您。如果您开始为实际场景中遇到的所有自定义案例寻找现成的 API,这将变得困难。

I do not want to read single record from database per item due to performance issues it might have.

如果一次阅读当前项目的所有相关项目怎么办?您可以使用 driving query pattern 来实现。这个想法是使用一个项目处理器来查询数据库以获取与当前项目相关的所有记录。