2009-07-20 5 views
9

同じインスタンス上で実行されているmysqlインスタンスと通信するJavaアプリケーションを実行しているマシンがあります。アプリ は、mysqlのjdbc4ドライバを使用します。私はcom.mysql.jdbc.exceptions.jdbc4.CommunicationsExceptionをランダムに取得しています。 jdbc4 CommunicationsException

ここにメッセージ全体があります。

トランザクションのJDBC接続をオープンできませんでした。ネストされた例外は、MySQLの

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. 

で、グローバルな「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を使用して問題を解決できますか?

答えて

6

Apache Commons DBCPを正しくセットアップしてください。問題を修正する必要があります真

から1 + 1

  • testOnBorrowを選択することが

    • validationQueryを:

      あなたが設定する必要があります。

  • +0

    Thnx、これは現時点で動作しているようです。 – letronje

    0

    例外のアドバイスに従います。期限切れおよび/またはアプリケーションで使用する前に、接続の有効性をテストする

    1. 、Connector/Jの接続プロパティ「を使用して、サーバー構成されたクライアントのタイムアウトの値、または
    2. を増やす
    3. 自動再=:あなたはどちらかを検討すべきですこの問題を回避するには「true」を選択します。そのURLを接続URLに追加してみてください(正確な構文については、ドキュメントを参照してください)。

    私は、C3P0が既に使用しているDBCPよりもはるかに優れているとは思っていません。例外はいくつかの具体的なアドバイスを提供しています。あなたは#3を試しました。他の2つはどう?

    私はWebLogicを使用する前に接続をチェックするように要求する方法を知っています。あなたはTomcatで同じことをする方法を見つけるべきです。

    +0

    これを試してみると、「トランザクションのJDBC接続をオープンできませんでした;ネストされた例外はcom.mysql.jdbc.exceptionsです。jdbc4.CommunicationsException:通信リンクのエラー " – letronje

    1

    あなたのアプリが接続プーリングをどのように処理しているか説明できますか? JDBCドライバでautoReconnect = trueがアプリからの接続を再プールすることは疑わしいです。接続が失われたときに再接続する必要があります。

    0

    これまで、ネットワーク上を移動したWindowsマシンは、自分自身への接続に問題がありました。

    JVM以外の接続に問題がありますか?つまり、mysqlクライアントがサーバーに接続してタイムアウトしていますか?

    関連する問題