下面是我的 spring 批处理作业的配置,它从数据库中获取记录,在项目处理器中进行一些处理,更新状态列并写回数据库。当我运行 10k 条记录时,我可以看到它一条一条地获取每条记录并以相同的方式更新状态。最初我打算使用多线程,但这没有任何意义,因为我的工作每天运行一次,记录数量从 10 到 100k 不等。(记录在大多数情况下少于 5k,一年中的少数几天(5 到 10 天)达到 50k 到 100k)。我不想在一年中的 10 天里增加更多的 CPU 并被 Kubernetes 收费。现在的问题是,当我运行这项工作时,它只需要 100 条记录,它独立运行每个选择查询,而不是一次需要 100 条。一次更新也是一条记录,处理 10k 条记录需要 10 分钟,这真的很慢。如何进行更快的读取、处理和写入?我可以摆脱多线程并偶尔获得更多的 CPU 利用率。更多信息在代码中作为注释给出。
2 回答
手掌心
TA贡献1942条经验 获得超3个赞
谢谢大家的建议。我自己发现了这个问题。我正在使用 JdbcPagingItemReader 和 RepositoryItemWriter。阅读器按预期工作,但编写器正在为处理器后传递的每条记录触发选择查询。我相信背后的原因是,由于阅读器不是标准的 JPA 阅读器,因此该记录仅在处理器之后才会持久保存到 JPA。不过我不确定。但是将编写器更改为 JdbcBatchItemWriter 解决了这个问题。
添加回答
举报
0/150
提交
取消