我需要从 RDBMS 表中读取数据并调用 REST API,以便将信息提取到下游系统中。
下游 REST API 一次仅允许传递一个项目。
基于 block 的 Spring Batch 是否是满足此要求的更好选择,因为我没有使用项目编写器一次处理所有项目的功能?
通常,当我们使用像 JPA ItemWriter 这样的 Item writer 时,item writer 具有通过数据库批处理操作将整个数据 block 存储在单个事务中的优势。
但是当目标 I/O 是 REST API 时,这种优势就不可能实现。
我可以并行运行 block 。
在这个需求中使用 Spring Batch 比从数据库读取并调用 API 的自定义实现还有其他优势吗?
最佳答案
Downstream REST API only allows a single item to be passed at a time.
您可能可以使用带有 chunkSize=1
的面向 block 的步骤。这通常不是一个好主意,因为每个项目都会有一个事务(没有您提到的缓冲和批量写入),但对于小型/中型数据集来说它可能工作/性能良好。
Would there still be other advantages of using spring batch in this requirement rather than a custom implementation of reading from database and invoking API?
是的,可重新启动。如果您的作业在某个时刻失败,Spring Batch 允许您从中断处重新启动它(即,不要重新处理在上次运行中已读取并发布到 REST 端点的项目)。如果您采用自定义实现路线,则需要自己实现(除非您不关心将所有内容重新处理两次)。
关于基于 Spring Batch block 的方法在 Item Writer 中调用 REST API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65276253/