2015-05-19 66 views
0

我在Eclipse 4.3.2中使用Tomcat 7(jdk 1.6)。Tomcat驗證每次借用的連接

我配置我的連接池如下:

<Resource name="jdbc/myDS" auth="Container" type="javax.sql.DataSource" 
    driverClassName="com.p6spy.engine.spy.P6SpyDriver" 
    url="jdbc:p6spy:oracle:thin:@server:1521:XXX" 
    username="XXX" password="XXX" maxActive="2" maxIdle="2" maxWait="-1" 
    validationInterval="30000" validationQuery="SELECT 1 FROM DUAL" 
/> 

我使用Spring 3.2.14,休眠3.2.6-GA,CXF 2.7。

每當我收到一個SOAP請求時,我在P6SPY日誌中看到驗證查詢獨立於驗證間隔及其說明https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html運行。

我期待着每30秒最多驗證一次連接。

我的配置有什麼問題,或者這是一個已知的錯誤?

回答

2

的解釋很簡單,我做沒有正確讀取文檔,我需要將工廠設置爲org.apache.tomcat.jdbc.pool.DataSourceFactory以便使用「Tomcat高併發連接池」

後,所有參數按預期工作:

<Resource 
    factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
    name="jdbc/myDS" auth="Container" type="javax.sql.DataSource" 
    driverClassName="com.p6spy.engine.spy.P6SpyDriver" 
    url="jdbc:p6spy:oracle:thin:@server:1521:XXX" 
    username="XXX" password="XXX" maxActive="2" maxIdle="2" maxWait="-1" 
    testOnBorrow="true" 
    testWhileIdle="true" 
    timeBetweenEvictionRunsMillis="10000" 
    validationInterval="30000" 
    validationQuery="SELECT 1 FROM DUAL" 
/> 

的連接最多每validationInterval進行驗證。一個evictionThreadtimeBetweenEvictionRunsMillis運行並驗證空閒連接(我選擇這樣做是爲了節省連接借用時間)。

0

嗯,這可能是因爲您將testOnBorrow參數設置爲true。這是從您提供的文檔鏈接中提取的。

的對象是否會從池中

所以在被借用之前被驗證的指示,我想你可能需要將其設置爲false

+0

那麼,我試過這兩種解決方案有或沒有'testOnBorrow'參數。但我期待validationInterval有優先權。我編輯我的問題,以刪除'testOnBorrow'。 – yunandtidus