web-dev-qa-db-ja.com

Spring Boot:Hibernate、JDBC、MySQLを数時間使用しなかった後の通信リンク障害

Spring Bootアプリケーションが数時間(夜間など)非アクティブである場合、このエラーが発生します。

2015-05-19 09:16:32.666  WARN 20582 --- [http-nio-8080-exec-6] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 0, SQLState: 08S01
2015-05-19 09:16:32.668 ERROR 20582 --- [http-nio-8080-exec-6] o.h.engine.jdbc.spi.SqlExceptionHelper   : Communications link failure

The last packet successfully received from the server was 29.792.613 milliseconds ago.  The last packet sent successfully to the server was 6 milliseconds ago.

この問題を解決しようとすると、MySQLには、デフォルトで8時間(28800秒)に設定されたwait_timeoutという名前のパラメーターがあります。非アクティブな接続がすべて閉じられたため、SpringBootアプリケーションが機能しなくなりました...

私の質問は次のとおりです。

  • どうすればこの問題を回避できますか?
  • そのようなパラメータの値を増やす必要がありますか?
  • そのような価値を高める欠点はありますか? (それが非常に長い間非アクティブである場合、それは常に私のアプリケーションが到達する値である可能性があります。。:/)
  • Spring Bootを使用した別の解決策はありませんか(ポーリングなど)?

[〜#〜]編集[〜#〜]

ここに他の同様の/有用な質問があります:

上記の参照から、1つの解決策は、追加のライブラリとしてC3p0を追加し、通信リンクエラーを回避するように適切に構成することであると結論付けることができます。

それは私が持っている唯一の解決策ですか? Spring/Spring Bootとより「統合」された(つまり、外部ライブラリを追加しない)ソリューションはありませんか?

10
Andrea

私はここで説明されているように問題を解決しました: http://blog.netgloo.com/2015/07/09/spring-boot-communications-link-failure-with-mysql-and-hibernate/ 、これらの構成をapplication.propertiesファイルに追加します。

spring.datasource.Tomcat.testWhileIdle = true
spring.datasource.Tomcat.timeBetweenEvictionRunsMillis = 60000
spring.datasource.Tomcat.validationQuery = SELECT 1
15
Andrea