web-dev-qa-db-ja.com

接続オブジェクトをHikariCPプールに戻すための最良のアプローチ

HikariCP接続プールを使用しようとしています。私はそれを機能させ、使用できる接続を得ることができました。接続をプールに戻すための最善のアプローチが何であるかわかりません。

次の質問があります。

  • 完了したら接続を閉じる必要がありますか、idleTimeoutおよびmaxLifetimeの設定に依存しますか、それともプールからの接続を占有しないように使用できる別の呼び出しがありますか?
  • (プールに戻る代わりに)接続を閉じると、接続プールサイズの要件を満たすために追加の接続オブジェクトが作成されませんか?

役立つ提案を探しています。

16
user3813256

ほとんどの接続プールと同様に、Hikariは実際のJDBC接続を要求したときに提供しません。代わりに、Connectionインターフェイスを実装するプロキシを提供します。ひかりの場合、これはConnectionProxyオブジェクトです。

このプロキシはいくつかの目的を果たしますが、その主な目的は、接続とステートメントの開閉の制御をユーザーから離れて接続プールに移すことです。これは自動的に発生し、通常どおり接続を使用する必要があります。これには、使用後にそれらを閉じることも含まれます。

Hikariのソースコード を見ると、特にConnectionProxyクラスでは、close()メソッドが標準のメソッドと大きく異なることがわかります。コードは次のようになります。

接続を閉じたものとしてマークし、クリーンアップを実行し、基になる接続状態とパラメーターをリセットします。

したがって、close()を呼び出すだけで、接続がクリーンアップされてプールに返されます。

49
Ordous