【问题标题】:Closing Inactive Sessions using BasicDataSource使用 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 吗?)

标签: java oracle jdbc


【解决方案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

也可能是你没有在应用层正确关闭连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-10
    • 2014-09-24
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    相关资源
    最近更新 更多