![](/img/trans.png)
[英]oracle.jdbc.pool.OracleDataSource run a command for every new connection
[英]Setting Pooling Property on 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);
我跟這樣的活動連接:
occm = OracleConnectionCacheManager.getConnectionCacheManagerInstance();
occm.getNumberOfActiveConnections(CACHE_NAME);
如果我不關閉應用程序中的連接,那么池最多只能填充6個,所以
cacheProps.setProperty("AbandonedConnectionTimeout", "2");
不管用。 為什么?
任何提示都將不勝感激
根據Oracle的教程,還涉及另一個屬性。
創建緩存時,會設置三個重要屬性:PropertyCheckInterval,AbandonedConnectionTimeout和LowerThresholdLimit。 PropertyCheckInterval設置緩存管理器檢查並強制執行所有指定緩存屬性的時間間隔。
嘗試也設置
cacheProps.setProperty("PropertyCheckInterval", "1");
默認為15分鍾......
但是,對於被認為放棄的連接,兩秒鍾可能有點短,並且由於您還必須明確設置檢查間隔,我想這會涉及一些開銷。 因為你真的非常希望在應用程序代碼中正確地關閉連接並且僅在非常罕見的情況下依賴於此,所以你應該為兩者設置更高的值。
你必須添加這個屬性:
cacheProps.setProperty("InactivityTimeout", "2")
cacheProps.setProperty("AbandonedConnectionTimeout", "2")
cacheProps.setProperty("PropertyCheckInterval", "1")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.