2009-07-20 68 views
9

我有一臺機器運行一個java應用程序,與在同一實例上運行的mysql實例進行通話。應用程序 使用來自mysql的jdbc4驅動程序。我隨機獲取com.mysql.jdbc.exceptions.jdbc4.CommunicationsException 。jdbc4 CommunicationsException

這是整個消息。

無法爲事務打開JDBC連接;嵌套的異常是

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was25899 milliseconds ago.The last packet sent successfully to the server was 25899 milliseconds ago, which is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem. 

對於MySQL,全球「WAIT_TIMEOUT」和「interactive_timeout」的值被設置爲3600秒和「connect_timeout」被設定爲60秒。等待超時值遠高於26秒(25899毫秒)。在異常追蹤中提到。

我使用dbcp進行連接池,這裏是數據源的spring bean配置。

<bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource" > 
      <property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
        <property name="url" value="jdbc:mysql://localhost:3306/db"/> 
       <property name="username" value="xxx"/> 
       <property name="password" value="xxx" /> 
        <property name="poolPreparedStatements" value="false" /> 
      <property name="maxActive" value="3" /> 
      <property name="maxIdle" value="3" /> 
    </bean> 

任何想法爲什麼會發生這種情況?請問用c3p0解決問題?

回答

6

嘗試正確設置Apache Commons DBCP。

您需要設置:

  • validationQuery到SELECT 1個+ 1
  • testOnBorrow真

這應該解決這個問題。

+0

Thnx,這似乎目前正在工作。 – letronje 2009-08-14 10:07:58

0

我會按照例外的建議。您應該考慮之一:

  1. 到期和/或應用程序使用之前測試連接的有效性,
  2. 使用連接器/ J連接屬性「增加了對客戶端超時服務器配置的值,或
  3. autoReconnect的=真「來避免這個問題。嘗試將其添加到您的連接URL(請參閱文檔中的確切語法)並查看是否有幫助。

我懷疑C3P0比你已經使用的DBCP好得多。例外是給你一些具體的建議。你已經嘗試了#3。那另外兩個呢?

我知道如何讓WebLogic在使用它們之前檢查連接。您應該瞭解如何在Tomcat中執行相同的操作。

+0

試過了,現在變得「無法打開JDBC連接進行事務處理;嵌套異常是com.mysql.jdbc.exceptions。jdbc4.CommunicationsException:通信鏈路故障「 – letronje 2009-07-20 11:04:59

1

你能描述一下你的應用如何處理連接池嗎?我懷疑JDBC驅動程序中的autoReconnect = true會重新從您的應用程序中獲取連接。應用程序在失去連接時需要重新連接。

0

我以前見過,已經在網絡上移動的Windows機器連接到自己時遇到了麻煩。

JVM之外是否存在任何連接問題 - 即連接到服務器的mysql客戶端和超時等?

相關問題