jdbc4 CommunicationsException(jdbc4 Communications

2019-06-26 08:45发布

我有一个运行Java应用程序交谈,在同一实例上运行的MySQL实例的机器。 应用程序使用jdbc4司机从MySQL。 我一直在随机时间越来越com.mysql.jdbc.exceptions.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连接池,这里是春天的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将解决这个问题?

Answer 1:

尝试正确设置Apache下议院DBCP。

您需要设置:

  • validationQuery选用1 + 1
  • testOnBorrow为真

这应该解决这个问题。



Answer 2:

你能描述你的应用程序是如何处理连接池? 我怀疑autoReconnect的在JDBC驱动程序将重新池中您的应用程序连接=真。 该应用程序需要时,它失去连接,重新连接。



Answer 3:

我会按照异常的建议。 您应该考虑之一:

  1. 到期和/或使用之前测试连接的有效性在应用程序中,
  2. 增加服务器配置的值进行客户端超时,或
  3. 使用连接器/ J连接属性“autoReconnect的=真”来避免这个问题。 尝试添加,为您的连接URL(有关确切语法文档),看看是否有帮助。

我怀疑C3P0将是很多比你已经在使用DBCP更好。 唯一的例外是给你一些具体的建议。 你试过#3。 什么其他两个?

我知道如何提出的WebLogic在使用前检查连接。 你应该找出如何做同样的Tomcat的。



Answer 4:

我已经看到了已经被移动的网络上的Windows机器已经与连接到自己的麻烦了。

有没有在JVM之外的任何连接问题 - 即MySQL客户端连接到服务器,以及超时等?



文章来源: jdbc4 CommunicationsException