2012-08-01 36 views
0

我希望你能幫助我,我堅持對生產ENV ... 我運行春季主要應用的Java 1.7和MySQL連接器5.1版的錯誤。 2和Apache公共連接池版本1.3。MySql的異常不能得到一個連接,池錯誤超時等待空閒對象

我的春天數據源配置:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
     <property name="driverClassName" value="${db.driverClassName}" /> 
     <property name="url" value="${db.url}" /> 
     <property name="username" value="${db.username}" /> 
     <property name="password" value="${db.password}" /> 
     <property name="maxActive" value="100" /> 
     <property name="maxWait" value="1000" /> 
     <property name="poolPreparedStatements" value="true" /> 
    </bean> 

運行幾個小時後,得到了異常 org.apache.commons.dbcp.SQLNestedException:不能得到一個連接,池錯誤超時等待空閒對象

起初我以爲有連接泄漏,運行netstat檢查數據庫連接後,我看到每件事情都很好管理和連接的數量保持良好,因爲它應該遠低於maxActive值...

一個更奇怪的是,在每一個當前時刻,主應用程序的3個實例與業務邏輯配置的不同運行的每一個,但數據源配置在每個相同的,事情是我得到的例外只爲一個實例,而另外兩個實例像往常一樣從DB獲取連接。

除了從從MySQL數據庫有更多的服務與數據庫通信池連接我的Java實例,但DB總連接數要低得多,然後在我的MySQL配置。

我閱讀了有關該異常相關的職位,但主要問題是連接泄漏,但在我的情況我敢肯定我沒有得到任何。

感謝您的幫助....

回答

0

你的一個Java實例的失去與數據庫的連接,但處理的BasicDataSource這個問題,但正如你所指定MAXWAIT屬性值1000,因此池將等待僅1000毫秒爲單位要在拋出異常之前返回連接,請移除該maxwait標記或爲indefinete等待指定-1值。

你應該使用validationquery屬性來驗證從這個池連接

讓你的BasicDataSource缺少一些配置,以增加您的問題將得到解決

<property name="testWhileIdle" value="true" /> 
<property name="validationQuery"><value>SELECT 1</value></property> 
<property name="testOnBorrow"><value>true</value></property> 

下面的配置屬性和更多的配置請參考此鏈接http://commons.apache.org/proper/commons-dbcp/configuration.html

相關問題