jdbc4 CommunicationsException

我有一台机器运行一个Java应用程序与同一个实例上运行的一个mysql实例交谈。 该应用程序使用MySQL的jdbc4驱动程序。 我随机获取com.mysql.jdbc.exceptions.jdbc4.CommunicationsException。

这是整个消息。

无法打开JDBC连接进行事务处理; 嵌套的exception是com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:从服务器成功接收的最后一个数据包是25899毫秒前。成功发送到服务器的最后一个数据包是25899毫秒前,这比服务器configuration的值“ WAIT_TIMEOUT”。 在应用程序中使用之前,应考虑使用过期和/或testing连接有效性,增加服务器configuration的客户端超时值,或者使用Connector / J连接属性“autoReconnect = true”来避免此问题。

对于mysql,全局“wait_timeout”和“interactive_timeout”的值设置为3600秒,“connect_timeout”设置为60秒。 等待超时值远高于26秒(25899毫秒)。 在例外跟踪中提到。

我使用dbcp连接池,这里是数据源的spring beanconfiguration。

<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解决问题?

我刚刚发现,使用mysql .NET连接器需要25秒或更长时间的查询。 也许在JDBC驱动程序中有类似的东西,可能会使用socketTimeout属性(尽pipe文档说默认没有超时)。