私のアプリケーションの問題のようです。起動時にアプリケーションが非常に長い時間 (正確なタイミングがわからない) アイドル状態になると、ログに次のエラー メッセージが表示されます。接続プーリングに Spring+Hibernate+MySQL と ApacheDBCP を使用しています
ERROR [org.hibernate.util.JDBCExceptionReporter]The last packet successfully received from the server was 74,188,684 milliseconds ago.
The last packet sent successfully to the server was 74,188,685 milliseconds ago. 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.
org.hibernate.exception.JDBCConnectionException: could not execute query
URL を再起動すると、すべて正常に動作します。これは、接続プーリングと関係があると思います。これが私のApache DBCP設定で、MYSQLのwait_timeoutはデフォルトに設定されています。(28800 秒または 8 時間)。
<beans:bean id="MyID" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<beans:property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<beans:property name="url" value="jdbc:mysql://localhost:17761/myDB"/>
<beans:property name="username" value="myname"/>
<beans:property name="password" value="mypwd"/>
<beans:property name="maxIdle" value="5"/>
<beans:property name="maxActive" value="20"/>
<beans:property name="minIdle" value="5"/>
</beans:bean>
その間、私はこのリンクを見つけました 問題を解決するための可能なオプション。
autoReconnect=true で接続文字列を構成する
これは問題の解決に役立ちますか? 上記の同じ質問で、別の著者は、この解決策を採用することはお勧めできません。
MySQL サーバー変数 wait_timeout の値を増やします。
これがエラーの解決にどのように役立つかわかりません。役立つ場合は、適切な wait_timeout 値を計算する方法。これの基準は何ですか?
接続プールを構成して、接続の有効性をテストします。
いくつかの調査の後、validationQuery="SELECT 1" を使用して、実際のクエリを実行する前に接続を確認できることがわかりました。これは問題の解決に役立ちますか? パフォーマンスに影響しませんか?
この問題は Apache DBCP だけに固有のものではなく、C3P0 でも発生しました。
助けてください。