java - 在 oracle.jdbc.pool.OracleDataSource 上设置池属性

标签 java oracle connection-pooling

我将 oracle.jdbc.pool.OracleDataSource 用于连接池。我希望池检查连接是否未正确关闭并 catch 它。我尝试了以下方法:

ods = new OracleDataSource();

ods.setConnectionCachingEnabled(true);
ods.setConnectionCacheName(CACHE_NAME);

Properties cacheProps = new Properties();
cacheProps.setProperty("MinLimit", Integer.toString(1));
cacheProps.setProperty("MaxLimit", Integer.toString(6));
cacheProps.setProperty("InitialLimit", "1");
cacheProps.setProperty("AbandonedConnectionTimeout", "2");

ods.setConnectionCacheProperties(cacheProps);

我这样检查 Activity 连接:

occm = OracleConnectionCacheManager.getConnectionCacheManagerInstance();
occm.getNumberOfActiveConnections(CACHE_NAME);

如果我不关闭应用程序中的连接,池将填充到 6,所以

cacheProps.setProperty("AbandonedConnectionTimeout", "2");

不工作。为什么?

任何提示将不胜感激

最佳答案

根据 Oracle's tutorial还涉及另一个属性。

When the cache is created, three important properties, the PropertyCheckInterval, AbandonedConnectionTimeout and LowerThresholdLimit are set. PropertyCheckInterval sets the time interval at which the cache manager inspects and enforces all specified cache properties.

也尝试设置

 cacheProps.setProperty("PropertyCheckInterval", "1");

默认为 15 分钟...

不过,两秒对于被视为已放弃的连接来说可能有点短,而且由于您还必须显式设置检查间隔,我想这会涉及一些开销。由于您真的非常想在应用程序代码中正确关闭连接并且只在极少数情况下依赖它,因此您可能应该为两者设置更高的值。

关于java - 在 oracle.jdbc.pool.OracleDataSource 上设置池属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3931629/

相关文章:

java - 将 byte 或 int 转换为 bitset

sql - 在具有聚合函数的简单查询中使用 DISTINCT 是多余的吗

java - 连接池模式

java - 我可以比较两个文件 : local and remote on http server without downloading?

java - 在 Linux 上的 Scala 中锁定和写入文件的最佳方式

java - JColorChooser 在 Java 中更改字体颜色

java - 获取异常 ORA-00942 : table or view does not exist - when inserting into an existing table

sql - 在 Oracle 表中添加列

java - Tomcat JDBC 连接池问题 : "Statement is closed"

apache - 我可以在 Prefork MPM 下使用 Apache mod_proxy 作为连接池吗?