代码之家  ›  专栏  ›  技术社区  ›  letronje

JDBC4通信接收

  •  9
  • letronje  · 技术社区  · 15 年前

    我有一台运行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用于连接池,这里是数据源的SpringBean配置。

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

    4 回复  |  直到 10 年前
        1
  •  6
  •   Aleksandr Panzin    15 年前

    尝试正确设置Apache Commons DBCP。

    您需要设置:

    • 选择1+1的验证查询
    • 测试借用为真

    这样可以解决问题。

        2
  •  1
  •   djangofan    15 年前

    你能描述一下你的应用程序是如何处理连接池的吗?我怀疑jdbc驱动程序中的autoreconnect=true会从您的应用程序重新共享连接。应用程序断开连接后需要重新连接。

        3
  •  0
  •   duffymo    15 年前

    例外情况下我会听从建议。您应该考虑:

    1. 在应用程序中使用前过期和/或测试连接有效性,
    2. 增加服务器配置的客户端超时值,或
    3. 使用connector/j连接属性“autoreconnect=true”可避免此问题。尝试将其添加到您的连接URL中(请参考文档了解确切的语法),看看是否有帮助。

    我怀疑c3p0会比你已经使用的dbcp好得多。例外情况是给你一些具体的建议。你已经试过了。另外两个呢?

    我知道如何让WebLogic在使用前检查连接。你应该知道如何使用Tomcat。

        4
  •  0
  •   Thorbjørn Ravn Andersen    15 年前

    我以前见过在网络上移动的Windows机器在连接到它们自己时遇到了问题。

    在jvm之外是否存在任何连接问题,比如mysql客户机连接到服务器,超时等等?