【发布时间】:2021-08-11 20:10:35
【问题描述】:
我正在用 Spring Batch 实现一个 Job,我的简单场景是:
- 从文件中读取项目
- 处理每个项目
- 将项目块写入数据库
问题是我想过滤掉数据库中已经存在的项目。
我的第一次尝试是在第二步中查询当前项目的数据库,如果已经存在,则从 ItemProcessor 返回 null,以便过滤掉该项目。 这是不必要的慢,因为每个处理的项目都需要一个查询。
所以我的第二次尝试是重写 ItemWriter 中的 doWrite 方法,以对整个块进行单个查询,并只写入查询中没有匹配的项目。 即使性能有了明显的提高,这对我来说也不是很好(这样,Spring Batch 看不到我实际写入数据库的内容,确实来自 StepContext 的写入和过滤计数器的值错误)。
实现这个处理逻辑的正确方法是什么?
【问题讨论】:
标签: spring spring-batch spring-data-mongodb