2010-10-14 52 views
3

我使用oracle.jdbc.pool.OracleDataSource進行連接池。我希望游泳池檢查連接是否沒有正確關閉並追上。我試過如下:在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); 

我ckeck活動的連接是這樣的:

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

如果我不關閉在游泳池只是填補了6個應用程序的連接,所以

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

不起作用。爲什麼?

任何暗示,將不勝感激

回答

5

根據Oracle's tutorial有牽涉的其他屬性。

創建緩存時,設置了三個重要屬性PropertyCheckInterval,AbandonedConnectionTimeout和LowerThresholdLimit。 PropertyCheckInterval設置緩存管理器檢查和執行所有指定緩存屬性的時間間隔。

嘗試還設置

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

的默認值爲15分鐘...

兩秒鐘可能是有點短的被視爲放棄的連接,不過,既然你有明確設置檢查時間間隔,我想這會涉及一些開銷。既然你真的想要在應用程序代碼中正確關閉連接,並且只在非常罕見的情況下依賴這個連接,那麼你應該爲兩者設置更高的值。

+0

非常感謝... – 2010-10-18 07:41:40