【发布时间】:2020-01-10 15:41:30
【问题描述】:
我有一个每天运行的 Spring Batch Job,有大约 100k 条记录要处理。我的批次配置如下。
ItemReader :我使用 JdbcCursorItemReader 从单个表中读取数据(该表包含所有源记录)。 块大小为 1000
ItemProcessor :这里我添加了对每条记录执行验证的逻辑。验证包括检查数据的正确性,一旦验证完成,我将验证几张表(为此记录)。
ItemWriter :这里我根据验证结果更新了最终表格。(这是一个批量操作,我使用 JdbcTemplate.batchUpdate 来加快处理速度) .
结果: 处理 104000 条记录的工作大约需要 140 分钟。由于这是每天运行,并且许多其他作业在生产中并行运行,我想提高这批的性能。
有人可以建议一个更好的方法来增强这批吗? (我在步骤配置中尝试了spring批处理使用taskexecutor提供的多线程方法,但我在阅读器中遇到了一些光标问题,如下所示)
**Caused by: org.springframework.dao.InvalidDataAccessResourceUsageException: Unexpected cursor position change.
at org.springframework.batch.item.database.AbstractCursorItemReader.verifyCursorPosition(AbstractCursorItemReader.java:368)
at org.springframework.batch.item.database.AbstractCursorItemReader.doRead(AbstractCursorItemReader.java:452)
at org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader.read(AbstractItemCountingItemStreamItemReader.java:88)
at org.springframework.batch.core.step.item.SimpleChunkProvider.doRead(SimpleChunkProvider.java:91)
at org.springframework.batch.core.step.item.FaultTolerantChunkProvider.read(FaultTolerantChunkProvider.java:87)**
【问题讨论】:
标签: java spring multithreading postgresql spring-batch