我有一台运行 java 应用程序的机器与在同一实例上运行的 mysql 实例通信。该应用程序使用来自 mysql 的 jdbc4 驱动程序。我不断收到 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException 随机时间。
这是整个信息。
无法为事务打开 JDBC 连接;嵌套异常是 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet failed received from the server was25899 毫秒前。最后一个成功发送到服务器的数据包是 25899 毫秒前,比服务器配置的值长 '等待超时”。您应该考虑在应用程序中使用之前使连接有效性过期和/或测试,增加客户端超时的服务器配置值,或使用 Connector/J 连接属性“autoReconnect=true”来避免此问题。
对于 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 会解决问题吗?