52

エラーメッセージからこのアドバイスを読みました:

この問題を回避するには、アプリケーションで使用する前に接続の有効性を期限切れにするかテストするか、クライアント タイムアウトのサーバー設定値を増やすか、Connector/J 接続プロパティ 'autoReconnect=true' を使用することを検討する必要があります。

私はSpringとJPAを使用しています。Connector/J はどこで設定すればよいですか? (persistence.xml、またはentityManagerFactoryスプリング構成、またはdateSourceスプリング構成、または他の場所で?)

4

4 に答える 4

74

このテキストでは、接続の中止を防ぐための3つの解決策について説明しています。

  1. で接続文字列を構成しますautoReconnect=true。これは、ドライバレベルで機能するURL接続文字列のプロパティです。データソース構成で接続文字列を変更する必要があります。

    url="jdbc:mysql://localhost:3306/confluence?autoReconnect=true"
    
  2. タイムアウトを増やします。これは通常、データベースのプロパティです。この値を増やすと、接続の中止が少なくなるかどうかを確認できます。

  3. 接続の有効性をテストするように接続プールを構成します。これは、ドライバーレベルではなく、プールで行われます。これは、使用するデータソースの実装によって異なります。ただし、プールされたもの( c3p0など)を使用する場合は、データソースのプロパティで構成可能である必要があります。

追加コメント:

  • データソース/プールにはタイムアウトを設定することもできます。これは、アイドル状態の接続がプールに残っている時間に対応します。dbタイムアウトと混同しないようにします。
  • 接続の有効性をテストする方法はいくつかあります。一般的な方法の1つは、ダミーのテストテーブルを用意することです。プールはダミーテストテーブルに対してselectを発行して、接続がまだ正常かどうかを確認します。
于 2010-01-16T11:36:33.210 に答える
21

AutoReconnect推奨されません。MySQLはこちらから

ドライバーは、古くなった接続や切断された接続を再確立しようとする必要がありますか? 有効にすると、ドライバーは、現在のトランザクションに属する古い接続または無効な接続で発行されたクエリに対して例外をスローしますが、新しいトランザクションの接続で次のクエリが発行される前に再接続を試みます。この機能は、アプリケーションが SQLExceptions を適切に処理しない場合にセッション状態とデータの一貫性に関連する副作用が発生するため、推奨されません。死んで古くなった接続を適切に。または、最後のオプションとして、MySQL サーバー変数「wait_timeout」をデフォルトの 8 時間ではなく高い値に設定することを検討してください。

于 2012-08-17T18:34:02.397 に答える
-9

これは、私のように検索エンジンでこの古い投稿を見つけた人向けです。

他の答えは、より良い長期的な解決策です。mysqlただし、すぐに接続を再開する必要がある場合はshutdown、そうすることrestart tomcatで、しばらくの間すべてが正常に機能します。これにより、長期的な解決策を見つけている間、システムのダウンタイムを回避できます。

でに移動$CATALINA_HOMEterminal、 を入力してshutdown.sh、 を入力しstartup.shます。起動シーケンスが完了するまでしばらく待ちます。しばらくすると、アプリが再び動作します。

于 2015-01-20T21:46:42.500 に答える