jdbcTemplate关闭结果集吗?

时间:2017-01-10 10:10:10

标签: spring connection-pooling jdbctemplate

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

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

现在问题是结果集是否也被jdbcTemplate关闭以及连接关闭?或者我是否需要显式关闭resultSet以便可以自动关闭连接。打开的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个物理连接。现在我唯一的疑问是,连接在某种程度上没有接近,春天看到这些连接忙吗?这可能是因为结果集未关闭或其他原因?是一种说jdbctemplate不等待结束时间超过时间限制的方法吗?

由于 的Manoj

1 个答案:

答案 0 :(得分:5)

如果您查看org.springframework.jdbc.core.JdbcTemplate.query方法源代码,则会看到对

的调用
"columnDefs": [{ 
    "blogs": "title", "render": function (data, type, row) {
        console.log(row + data + type);
        return row.title;
    }
},

在finally块中 - 所以是的,JDBCTemplate会调用rs.close

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