我使用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);
我跟这样的活动连接:
occm = OracleConnectionCacheManager.getConnectionCacheManagerInstance();
occm.getNumberOfActiveConnections(CACHE_NAME);
如果我不关闭应用程序中的连接,则池最多只能填充6,所以
cacheProps.setProperty("AbandonedConnectionTimeout", "2");
无效。为什么呢?
任何提示都将受到赞赏
答案 0 :(得分:5)
根据Oracle's tutorial,还有另一个属性。
创建缓存时,会设置三个重要属性:PropertyCheckInterval,AbandonedConnectionTimeout和LowerThresholdLimit。 PropertyCheckInterval设置缓存管理器检查并强制执行所有指定缓存属性的时间间隔。
尝试也设置
cacheProps.setProperty("PropertyCheckInterval", "1");
默认为15分钟......
但是,对于被认为放弃的连接,两秒钟可能有点短,并且由于您还必须明确设置检查间隔,我想这会涉及一些开销。既然你真的非常希望在应用程序代码中正确地关闭连接并且只在非常罕见的情况下依赖它,那么你应该为两者设置更高的值。
答案 1 :(得分:0)
您必须添加此属性:
cacheProps.setProperty("InactivityTimeout", "2")
cacheProps.setProperty("AbandonedConnectionTimeout", "2")
cacheProps.setProperty("PropertyCheckInterval", "1")