2012-02-28 5 views
2

私はSpring-EntityManager(JPA)を使用するアプリケーションを持っています。私の前のアプリケーションの存続期間中にデータベースが利用できなくなった場合、どうなるのでしょうか。Spring-JPA EntityManagerはどのように「壊れた」接続を処理しますか?

私はその状況で、初めてデータベース上で何かをするときに例外をスローすると思いますよね?

しかし、私は10分待ってからもう一度やり直すとDBが戻ってきます。それは回復するだろうか?それを整えることはできますか?

ありがとうございます。

答えて

7

実際には、SpringとJPAのどちらも関係ありません。内部的にはすべての永続性フレームワークは単にDataSource.getConnection()を呼び出し、(おそらくプールされた)JDBC接続を受け取ることを期待しています。完了後、接続はclose()で効果的にプールに戻されます。

DataSourceが接続を要求されても、データベースが一致しない場合、例外がスローされます。その例外は拡大し、何らかのフレームワークで処理されます。 、などのように、通常はDataSourceの実装に問題を解決するために、壊れていることが分かっている接続を破棄し、新しいものに置き換えます。実際にはプロバイダに依存しますが、データベースが再び利用可能になると、DataSourceは徐々に病気の患者の接続を取り除き、健康なものに置き換えます。

また、多くのDataSource実装者は、接続を定期的にテストする方法を提供し、クライアントに返す前に提供します。これは、接続プールが含まれているプールされた環境では重要であり、データベースが利用できなくなったときにそのプールを検出する方法はありません。したがって、クライアントに返す前にDataSourceのテスト接続(SELECT 1などと呼んで)を実行し、接続を切断するためにしばらくしてから同じ処理を行います。根本的なTCP接続の破損によるものです。

TL; DR

はいは、データベースがバックになると、システムが正常に動作します例外とはいを取得します。あなたは簡単にこれをテストすることができます!

+0

ありがとう、それは私が探していたものです。 – kkiefer

関連する問題