当前位置: 首页 > 知识库问答 >
问题:

jdbcTemplate是否关闭结果集?

楚勇
2023-03-14

我有一个html" target="_blank">spring应用程序,它的主页发出多个ajax调用,这些调用反过来从DB中提取数据并返回。DB已配置连接池,minPoolSize为50,maxPoolSize为100。

现在,当我打开主页时,大约有7个连接与DB建立,这是因为大约有7个ajax调用被调用,我假设所有调用都创建了自己的连接。现在,当我刷新页面时,我看到又建立了7个新连接(我看到db2监控中总共有14个物理连接),这似乎出乎意料,因为我假设jdbcTemplate在第一次访问查询后确实关闭了连接,在这种情况下,刷新应该重用连接吗?

现在的问题是,结果集是否也会随着连接关闭而被jdbcTemboard关闭?还是我需要显式关闭结果集以便可以自动关闭连接。打开的结果集可能是连接无法关闭的原因?附上连池配置代码

<dataSource jdbcDriverRef="db2-driver" jndiName="jdbc/dashDB-Development" transactional="true" type="javax.sql.DataSource">
<properties.db2.jcc databaseName="BLUDB" id="db2-dashDB-Development-props" password="********" portNumber="*****" serverName="*********" sslConnection="false" user="*****"/>
<connectionManager id="db2-DashDB-Development-conMgr" maxPoolSize="100" minPoolSize="50" numConnectionsPerThreadLocal="2"/>

我最初的理论是连接的重用只有在达到minPoolsize时才会发生,并且在那之前它总是会创建新的物理连接。然而,即使在达到该限制之后,我也会看到这种行为。我刷新了我的页面10次,我看到了70个物理连接。现在我唯一的疑问是连接不知何故没有关闭,而Spring看到这些连接繁忙?这可能是因为结果集没有关闭或其他原因?这是不是一种说jdbc模板不等待超过时间限制关闭结果集的方式?

谢谢Manoj

共有1个答案

丁志勇
2023-03-14

如果你看看组织。springframework。jdbc。果心JdbcTemplate。您看到调用的查询方法源代码-

JdbcUtils.closeResultSet(rs);

在最后的块中-所以是的JDBCTemboard确实调用rs.close

该模板还关闭或返回到池的连接

 类似资料:
  • 问题内容: 我知道Java中的安全模式是在finally块中依次关闭ResultSet,Statement和Connection。 如果您关闭连接,然后尝试关闭语句(不抛出异常)。但是,如果您尝试从语句中调用任何方法,则会引发异常。 我想知道关闭连接是否会自动关闭从该连接创建的所有语句对象? 更新: 我正在使用DatabaseProductVersion:Oracle Database 11g版本

  • 我知道Java中的安全模式是在finally块中按顺序关闭结果集、语句和连接。 若您关闭连接,然后尝试关闭语句(不引发异常)。但若您试图从语句中调用任何方法,则会引发异常。 我想知道关闭连接是否会自动关闭所有由该连接创建的语句对象? 更新:我正在使用DatabaseProductVersion:Oracle Database 11g Release 11.1.0.0.0驱动程序名称:Oracle

  • 有人能帮我吗?

  • 以下网站展示了如何在JDBC中使用新的“自动关闭”功能:link。该网站显示了语句将如何自动关闭,但结果集不在try()部分,在那里它将自动关闭。所以,我的问题是,我不需要在Java 7中直接关闭结果集吗?我一直使用这种模式:关闭结果集、关闭语句、关闭连接。

  • JavaDoc for没有提到关闭底层的: https://docs.oracle.com/javase/8/docs/api/java/io/InputStreamReader.html#close-- 从课堂上复制的描述:Reader 关闭流并释放与之关联的所有系统资源。流关闭后,进一步的read()、ready()、mark()、reset()或skip()调用将抛出IOException。

  • 问题内容: 我想知道,在关闭阅读器之后,是否需要关闭InputStream? 问题答案: 不,您不必。 由于Java中用于流的装饰器方法可以通过将新流或读取器附加到其他流上来构建新流或读取器,因此实现将自动对其进行处理。 如果查看其来源,则会看到: 因此,关闭操作实际上关闭了底层的流读取器。 编辑:我想确保关闭也可以在输入流上工作,请继续关注。 签入 在调用sd的close时调用。