使用 BasicDataSource 关闭非活动会话
Posted
技术标签:
【中文标题】使用 BasicDataSource 关闭非活动会话【英文标题】:Closing Inactive Sessions using BasicDataSource 【发布时间】:2011-06-07 15:03:19 【问题描述】:在我们的开发数据库 Oracle 11g R2 中,我们注意到通过我们的 Java 应用程序使用 BasicDataSource 打开的连接会无限期地保持打开状态。理想情况下,我们希望每个应用程序实例最多有 5 个并发数据库会话,但是,如果会话处于非活动状态超过 60 秒,则应关闭会话以减少对数据库的内存影响。
使用以下代码设置我们的 BasicDataSource,我可以观察到我们保持在 5 个数据库会话上限以下,但我们似乎从未清除非活动会话:
BasicDataSource ds = new BasicDataSource();
ds.setUrl(getUrlAsString());
ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
ds.setUsername(getClientOracleUserAsString());
ds.setPassword(getClientOraclePasswordAsString());
ds.setMinIdle(0);
ds.setMaxIdle(5);
ds.setMinEvictableIdleTimeMillis(60000);
【问题讨论】:
是否将 MaxIdle 设置为 0 无法实现您想要的行为? (即它不尊重 MinEvictableIdleTimeMillis 吗?) 【参考方案1】:尝试设置以下内容:
//Sets the number of connections tested during the eviction process*
numTestsPerEvictionRun=5
//Sets whether idle object evictor will validate connections*
setTestWhileIdle=true
//Sets the validation query to run to validate a connection*
setValidationQuery=SELECT 1
也可能是你没有在应用层正确关闭连接。
【讨论】:
以上是关于使用 BasicDataSource 关闭非活动会话的主要内容,如果未能解决你的问题,请参考以下文章