シャードのダウンタイムが致命的な事態にならないマルチシャード データベース環境で作業しています。アプリケーションが起動すると、すべてのシャード情報がキャッシュにロードされ、それぞれSession
のオブジェクトがロードされますが、アプリケーションのアップタイム中に一部のシャードがダウンすることが予想されます。その場合、アプリケーションは残りのシャードの 1 つにフェイルオーバーします. これは、ほぼ標準的なユース ケース シナリオです。
場合によっては、クロスシャード スキャンを実行する必要があります。その方法は、上記のセッションのマップを反復処理してデータを取得することです。セッションが開いていたので、その間にダウンしたデータベースへの Hibernate セッションがあるときに問題が発生します。トランザクションを試みて を取得せずに DB がダウンしていることを事前にチェックする方法が必要org.hibernate.exception.GenericJDBCException
です。私も試しSession.isOpen()
てみSession.isConnected()
ましたが、データベースがダウンしていても両方のメソッドが true を返します。
Hibernate Session の接続をプリエンプティブかつ適切にチェックする方法はありますか? DBにpingを送信するようなもの。c3p0
また、接続プーリングに使用していることを知っておく価値があるかもしれません。接続がダウンしていることを Hibernate に伝え、関連するセッションを閉じる/切断するように構成する方法はありますか?