gpt4 book ai didi

java - 如何使用 JdbcTemplate 中的提取大小来处理 20+ 百万行?

转载 作者:行者123 更新时间:2023-12-05 07:24:36 30 4
gpt4 key购买 nike

我的表有 20 多万行,由于 OutOfMemoryError,我无法使用单个查询选择所有行。我阅读了有关 fetchSize 属性的信息,看起来它可能有助于解决我的问题,因为这是常见的建议

但我对如何应用它有疑问。

我有以下代码:

private final JdbcTemplate jdbcTemplate;
...
jdbcTemplate.setFetchSize(1000);
List<MyTable> myList= this.jdbcTemplate.query(
"SELECT * FROM my_table",
new Object[]{},
MyTableMapper.INSTANCE
);
mylist.foreach(obj->processAndSave(obj));

看起来 jdbc 驱动程序将为每个请求选择 1000。但是我应该怎么做才能处理所有 20+ 百万行?

我应该多次调用 jdbcTemplate.query 吗?

最佳答案

您可以根据游标获取结果

如果您使用的是 PostgreSQL 11要求:

  1. setFetchSize > 0
  2. 确保自动提交关闭

以标准配置为例

spring.datasource.hikari.auto-commit=false
spring.jdbc.template.fetch-size=50

此外,如果你想处理存储库类之外的结果你可以结合 queryForStream

Stream<MyTable> stream = jdbcTemplate.queryForStream(SQL,  MyTableMapper.INSTANCE);

PostgreSQL Documentation:Issuing a Query and Processing the Result

https://jdbc.postgresql.org/documentation/head/query.html

关于java - 如何使用 JdbcTemplate 中的提取大小来处理 20+ 百万行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55306863/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com