首页 文章

Spring批处理中的PagingItemReader与CursorItemReader

提问于
浏览
0

我有一个具有多个步骤的 spring 批次,一些顺序和一些并行 . 其中一些步骤涉及获取数百万行,并且查询具有多个连接和左连接 . 我尝试使用JdbcPagingItemReader,但order by子句只是挂起查询 . 即使等了30分钟,我也没有得到结果 . 所以我切换到了JdbcCursorItemReader . 那方法很好吗?我知道JdbcCursorItemReader一次获取所有数据并根据提交间隔将其写出 . 是否有任何选项指定读者一次获取50000条记录,以便我的应用程序和系统不会超载?


迈克尔,谢谢你的回复 . 我有22个自定义项目阅读器,它们是从jdbcCursorItemReader扩展而来的 . 如果有多个线程,Spring批处理将如何处理结果集?在这种情况下,是否有可能从同一结果集中读取多个线程?

1 回答

  • 1

    JdbcCursorItemReader 能够配置fetchSize(每个请求从db返回多少条记录),但这取决于您的数据库,并且_2770544被尊重 . 但是,MySql要求您将获取端设置为 Integer.MIN_VALUE 以便传输结果 . Sqlite是另一个有特殊要求的 .

    话虽这么说,重要的是要知道 JdbcCursorItemReader 不是线程安全的(多个线程将从同一个 ResultSet 读取) .

    我个人会主张调整你的查询,但假设上述条件,你应该可以使用 JdbcCursorItemReader 罚款 .

相关问题