2017-01-10 42 views
2

我有一个spring应用程序,其主页触发多个ajax调用,然后从数据库中获取数据并返回。该数据库已配置连接池,minPoolSize为50,maxPoolSize为100.做jdbcTemplate关闭结果集?

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

现在的问题是结果集也被jdbcTemplate和连接关闭了吗?或者我需要显式关闭结果集,以便连接可以自动关闭。打开的结果集可能是连接不紧密的原因?附加的代码和连接池的配置

<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只有当和到那时它总是创建新的物理连接。 HOwever我甚至在达到这个限制之后看到了这种行为。我刷新了我的页面10次,并看到70个物理连接。现在我唯一的疑问是,连接在某种程度上没有接近,春天看到这些连接很忙?这可能是因为结果集没有关闭或其他原因?这是一种说jdbctemplate不超过时间限制等待关闭结果集的方式吗?

感谢 马诺

+0

连接池将与JDBCTemplate分开管理 - 你可以在你的connectionManager配置中看到这个。此外,该模板可能会调用关闭 - 但底层连接管理员可能会将连接打开以供其他池用户使用 – farrellmr

+0

我同意并理解这一点..但是此时我看到连接没有得到重用,这意味着它不会重新连接池吗?如果这是真的,这意味着jdbcTemplate没有调用close?如果它回到池中,刷新应该从池中重用它们,而不是connectionManager要求新的连接。 –

+0

您不能控制池的操作 - 因此它可以根据您的配置参数决定如何最好地分配池策略 – farrellmr

回答

相关问题