2011-06-07 84 views
3

在我們的開發數據庫Oracle 11g R2中,我們注意到通過我們的Java應用程序使用BasicDataSource打開的連接保持無限期打開狀態。理想情況下,我們希望每個應用程序實例具有多達5個併發數據庫會話,但是,如果會話處於非活動狀態的時間超過60秒,會話應關閉以減少內存對數據庫的影響。使用BasicDataSource關閉非活動會話

使用下面的代碼來設置我們的BasicDataSource,我可以觀察到我們入住的5數據庫會話天花板下,但我們似乎從來沒有清除無效的會話:

BasicDataSource ds = new BasicDataSource(); 
ds.setUrl(getUrlAsString()); 
ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");   
ds.setUsername(getClientOracleUserAsString());    
ds.setPassword(getClientOraclePasswordAsString()); 
ds.setMinIdle(0); 
ds.setMaxIdle(5); 
ds.setMinEvictableIdleTimeMillis(60000); 
+0

是否將MaxIdle設置爲0未達到您想要的行爲? (即它不尊重MinEvictableIdleTimeMillis?) – 2011-06-19 22:28:01

回答

0

嘗試設置如下:

//Sets the number of connections tested during the eviction process* 
numTestsPerEvictionRun=5 

//Sets whether idle object evictor will validate connections* 
setTestWhileIdle=true 

//Sets the validation query to run to validate a connection* 
setValidationQuery=SELECT 1 

也可能是因爲您沒有在應用程序層正確關閉連接。