我們有一個使用hibernate作爲ORM工具的api,我們使用c3p0作爲連接池處理程序。當我們負荷很重時,我們沒有任何問題。但是,如果api在一天左右停用,我們正在耗盡「無法獲得連接」的例外。所以,如果週末沒有人使用api,我們會在週一早上發現連接錯誤。不活動期間後的連接超時值
Caused by: java.sql.SQLException: An attempt by a client to checkout a Connection has timed out.
我們使用mysql作爲數據庫。在我的研究中,我知道mySQL在8個小時左右之後會使連接失效。連接池可能會向客戶端發出一個陳舊的連接,從而導致客戶端的連接超時異常。
目前我們在C3Po中沒有配置任何連接測試。比方說,如果我使用IdleTestPeriod在連接池被給予客戶端之前測試連接。那麼如果我所有的連接在某個時間點都通過了測試,會發生什麼?將這些失敗的連接從池中移除並重新生成新的活動連接嗎?
目前,這是我們正在使用的c3p0設置。任何其他原因可能出現這個問題?
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${----}"/>
<property name="jdbcUrl" value="${----}"/>
<property name="user" value="${----}"/>
<property name="password" value="${------}"/>
<property name="minPoolSize" value="5"/>
<property name="acquireIncrement" value="5" />
<property name="maxPoolSize" value="125" />
<property name="maxStatements" value="10" />
<property name="maxIdleTime" value="180" />
<property name="maxIdleTimeExcessConnections" value="30" />
<property name="checkoutTimeout" value="3000" />
<property name="preferredTestQuery" value="SELECT 1" />
</bean>
感謝您的幫助