Spring JDBC模板ROW Mapper太慢

har*_*der 3 java spring jdbc jdbctemplate

我有一个使用 Spring 的数据库获取调用jdbcTemplate,要获取的行数约为 100 万。在结果集中迭代需要太多时间。调试行为后,我发现它像批处理一样处理一些行,然后等待一段时间,然后再次获取一批行并处理它们。行处理似乎不是连续的,因此总时间将持续几分钟。我使用了数据源的默认配置。请帮忙。

[编辑]

这是一些示例代码

this.prestoJdbcTempate.query(query, new RowMapper<SomeObject>() {
            @Override
            public SomeObject mapRow(final ResultSet rs, final int rowNum) throws SQLException {

                System.out.println(rowNum);
                SomeObject obj = new SomeObject();
                obj.setProp1(rs.getString(1));
                obj.setProp2(rs.getString(2));
                ....
                obj.setProp8(rs.getString(8));
                return obj;
            }
    });
Run Code Online (Sandbox Code Playgroud)

rin*_*rer 5

正如大多数评论告诉您的那样,在任何 UI 中显示一百万条记录都是无用且不现实的 - 如果这是真正的业务需求,您需要教育您的客户。

在此类场景中,网络流量应用程序和数据库服务器是性能的关键因素。在这种情况下,有一个可选参数可以真正帮助您:获取大小- 在某种程度上也是如此

例子 :

Connection connection = //get your connection
Statement statement = connection.createStatement();
statement.setFetchSize(1000); // configure the fetch size
Run Code Online (Sandbox Code Playgroud)

默认情况下,大多数 JDBC 数据库驱动程序的获取大小都很低,对此进行调整可以在这种情况下为您提供帮助。**但请注意**以下事项。

  • 确保您的 jdbc 驱动程序支持获取大小
  • 确保您的 JVM 堆设置 (-Xmx) 足够宽,可以处理由此创建的对象。
  • 最后,仅选择您需要的列以减少网络开销。

在春天,JdbcTemplate让您设置fetchSize