jdbc4 通信异常
我有一台运行 java 应用程序的机器与在同一实例上运行的 mysql 实例通信.应用程序使用来自 mysql 的 jdbc4 驱动程序.我不断收到 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException在随机时间.
I have a machine running a java app talking to a mysql instance running on the same instance. the app uses jdbc4 drivers from mysql. I keep getting com.mysql.jdbc.exceptions.jdbc4.CommunicationsException at random times.
这是整个信息.
无法为事务打开 JDBC 连接;嵌套异常是
Could not open JDBC Connection for transaction; nested exception is
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 毫秒).在异常跟踪中提到.
For mysql, the value of global 'wait_timeout' and 'interactive_timeout' is set to 3600 seconds and 'connect_timeout' is set to 60 secs. the wait timeout value is much higher than the 26 secs(25899 msecs). mentioned in the exception trace.
我使用 dbcp 进行连接池,这里是数据源的 spring bean 配置.
I use dbcp for connection pooling and here is spring bean config for the datasource.
<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 会解决问题吗?
Any idea why this could be happening? Will using c3p0 solve the problem ?
推荐答案
尝试正确设置 Apache Commons DBCP.
Try setting up the Apache Commons DBCP correctly.
你需要设置:
- 验证查询到 SELECT 1+1
- testOnBorrow 为真
这应该可以解决问题.
相关文章