当前位置: 首页 > 面试题库 >

jdbc4 CommunicationsException

祁建明
2023-03-14
问题内容

我有一台运行Java应用程序的机器与在同一实例上运行的mysql实例进行通讯。该应用程序使用来自mysql的jdbc4驱动程序。我一直在随机时间获取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进行连接池,这是数据源的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是否可以解决问题?


问题答案:

尝试正确设置Apache Commons DBCP。

您需要设置:

  • 验证查询到SELECT 1 + 1
  • testOnBorrow为true

那应该解决问题。



 类似资料:

相关阅读

相关文章

相关问答