1. ホーム
  2. spring

[解決済み] Spring Boot JPA - 自動再接続の設定

2022-05-18 06:55:24

質問

私は素敵な小さなSpring Boot JPAウェブアプリケーションを持っています。それはAmazon Beanstalk上に配置され、データの永続化のためにAmazon RDSを使用しています。しかし、それはそれほど頻繁に使用されていないため、この種の例外でしばらくすると失敗します。

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: サーバーから正常に受信された最後のパケットは 79,870,633 ミリ秒前でした。

サーバーに正常に送信された最後のパケットは、79,870,634ミリ秒前でした。 この問題を回避するには、アプリケーションで使用する前に接続の有効性を期限切れまたはテストするか、クライアントのタイムアウトのサーバー構成値を増やすか、Connector/J 接続プロパティ 'autoReconnect=true' を使用するかを検討する必要があります。

この設定をどのように構成すればよいのかわからず、また、この設定に関する情報を http://spring.io (非常に良いサイトですが) にも情報がありません。何かアイデアや情報へのポインタがあれば教えてください。

どのように解決するのですか?

私は、ブートが DataSource を設定していると思われます。この場合、また、MySQL を使用しているため、以下を application.properties 1.3 までは

spring.datasource.testOnBorrow=true
spring.datasource.validationQuery=SELECT 1

djxakがコメントで指摘したように、1.4+ではSpring Bootがサポートする4つの接続プールに対して特定の名前空間が定義されています。 tomcat , hikari , dbcp , dbcp2 ( dbcp は 1.5 で非推奨となりました)。どの接続プールを使っているか、その機能がサポートされているかどうかを確認する必要があります。上記の例はtomcatのものですので、1.4以上では以下のように記述する必要があります。

spring.datasource.tomcat.testOnBorrow=true 
spring.datasource.tomcat.validationQuery=SELECT 1

を使うことに注意してください。 autoReconnect は推奨されません。 :

<ブロッククオート

この機能の使用は推奨されません。アプリケーションが SQLExceptions を適切に処理しない場合、セッションの状態やデータの一貫性に関連する副作用があり、アプリケーションがデッドコネクトやステイルコネクションから生じる SQLExceptions を適切に処理するように設定できない場合にのみ使用するように設計されています。