使用 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 关闭非活动会话的主要内容,如果未能解决你的问题,请参考以下文章

优胜美地文件共享非活动帐户[关闭]

如何在android应用程序活动和非活动状态下处理推送通知

保持远程桌面会话“活动”[关闭]

Notification Hub 活动设备是不是会变为非活动设备?

关闭的应用程序上的地理通知

BasicDataSource 支持域名吗?