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

Mar*_*enz 3 java oracle connection-pooling

我使用oracle.jdbc.pool.OracleDataSource进行连接池.我希望游泳池检查连接是否未正确关闭并将其赶上.我尝试了以下方法:

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);
Run Code Online (Sandbox Code Playgroud)

我跟这样的活动连接:

occm = OracleConnectionCacheManager.getConnectionCacheManagerInstance();
occm.getNumberOfActiveConnections(CACHE_NAME);
Run Code Online (Sandbox Code Playgroud)

如果我不关闭应用程序中的连接,那么池最多只能填充6个,所以

cacheProps.setProperty("AbandonedConnectionTimeout", "2");
Run Code Online (Sandbox Code Playgroud)

不管用.为什么?

任何提示都将不胜感激

Thi*_*ilo 5

根据Oracle的教程,还涉及另一个属性.

创建缓存时,会设置三个重要属性:PropertyCheckInterval,AbandonedConnectionTimeout和LowerThresholdLimit.PropertyCheckInterval设置缓存管理器检查并强制执行所有指定缓存属性的时间间隔.

尝试也设置

 cacheProps.setProperty("PropertyCheckInterval", "1");
Run Code Online (Sandbox Code Playgroud)

默认为15分钟......

但是,对于被认为放弃的连接,两秒钟可能有点短,并且由于您还必须明确设置检查间隔,我想这会涉及一些开销.因为你真的非常希望在应用程序代码中正确地关闭连接并且仅在非常罕见的情况下依赖于此,所以你应该为两者设置更高的值.