サーバー側のバックエンドにある次のコードがあるとします。
class Foo {
void doSomething() {
try (Connection c = dataSource.getConnection()) {
executeSQL(c);
externalApiCall(); // this can be slow
executeSQL(c);
}
}
}
ここでの問題は、externalApiCall()
非常に遅くなる可能性があり、(使用されていない場合でも) 多くのデータベース接続を開いたままにし、接続の最大数を使い果たす可能性があることです。外部 API に依存しないアプリの他の部分に害を及ぼすため、これを回避したいと考えています。
上記のコードは単純化されており、実際には http リクエストを受信したときに Connection を ThreadLocal に入れる ServletFilter のようなものを使用しているため、ビジネス ロジックの最初で Connection を開く全体的なメカニズムを変更することは困難です。
だから私の質問は次のとおりです。素敵な接続プーリングライブラリ、ラッパー、またはそのような状況を適切に処理できるものはありませんか? たとえば、ステートメントオブジェクトが作成されたときにのみ実際のデータベース接続を開き、その後ステートメントが閉じられると自動的に接続を閉じるもの。現在、Tomcat DBCP を使用しています。