2009-07-20 76 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客户端和超时等?

相关问题