【问题标题】:How Spring batch JdbcCursorItemReader read data from database?Spring批处理JdbcCursorItemReader如何从数据库中读取数据?
【发布时间】:2018-03-14 17:28:20
【问题描述】:

我正在使用 Spring 批处理,并使用 JdbcCursorItemReaderpostgreSQL 读取数据。我关心的是JdbcCursorItemReader 内部如何读取数据库记录? 例如,如果数据库中有 1000k 记录,并且块大小为 1000。那么在这种情况下,JdbcCursorItemReader 将尝试获取 JVM 中的所有 1000k 记录,然后开始执行 1000 大小的块,或者它只会从 JVM 中获取 1000 条记录一次数据库(或其他获取记录的方式)。 还有setFetchSize 的用途是什么,它与提到块大小有什么不同? 我的要求是将数据从postgreSQL db 流式传输到 jvm。我需要什么配置?

【问题讨论】:

    标签: postgresql spring-batch


    【解决方案1】:

    JdbcCursorItemReader 的想法是将数据从 RDBMS 服务器流式传输到批处理作业。这可能需要根据您的设置进行一些额外的配置(我知道 MySql 需要某些参数......不是 100% 确定 Postgres)。但是,正确配置后的最终结果是数据会根据需要而不是一次全部到来。

    【讨论】:

    • 感谢您的回复。我需要了解有关 PostgreSQL 流式传输的配置
    • @MichaelMinella 由于我们不是一次获取所有数据,你们如何维护下一个要检索的字段的指针?还是仅在批处理失败时从该点重新开始?
    • 计算读取的项目数。您需要保持查询在运行中返回相同的数据集(有一些方法可以处理它,例如项目处理标志等)。
    • 我刚刚设置了 fetchSize 等于块大小,并且数据被正确获取。虽然仍然不知道,它是如何管理指向下一条记录的指针。
    • 你能解决这个问题吗?我正在尝试流式传输 200M 记录,而光标阅读器需要很长时间才能启动。
    猜你喜欢
    • 2014-10-29
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多