spring - jdbcTemplate 会关闭结果集吗?

标签 spring connection-pooling jdbctemplate

我有一个 spring 应用程序,它的主页会触发多个 ajax 调用,这些调用又从数据库中获取数据并返回。数据库已配置连接池,minPoolSize 为 50,maxPoolSize 为 100。

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

现在的问题是结果集是否也被 jdbcTemplate 和连接关闭一起关闭?或者我是否需要明确关闭 resultSet 以便可以自动关闭连接。打开的结果集可能是连接未关闭的原因?附上连接池配置的代码

<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 看到这些连接很忙?这可能是因为结果集未关闭还是其他原因?是否可以说 jdbctemplate 不等待超出时间限制的关闭结果集?

谢谢
马诺伊

最佳答案

如果你看 org.springframework.jdbc.core.JdbcTemplate.query您看到调用的方法源代码 -

JdbcUtils.closeResultSet(rs);

在 finally 块中 - 所以是的 JDBCTemplate 确实调用了 rs.close

模板也会关闭或返回到池的连接

关于spring - jdbcTemplate 会关闭结果集吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41566259/

相关文章:

spring - 如何解决 grails bootstrap 执行错误 "postProcessBeanDefinitionRegistry already called for this post-processor"?

java - 忽略 spring mvc 中的 Accept header

SpringBoot 应用程序。使用 JdbcTemplate 访问 2 个数据源

java - Spring 的 JdbcTemplate 是否在查询超时后关闭连接?

java - jdbcTemplate.queryForObject 在正常查询运行时返回 EmptyResultDataAccessException

java - 如何从 Controller 重定向到另一个 Controller 到 POST 方法?

java - Spring 测试/生产应用程序上下文

Oracle - 在不打开另一个连接的情况下验证用户和密码?

android - 用于连接到Postgresql DB的Android应用程序的连接池

java - DBCP 连接池