0

サーバー側のバックエンドにある次のコードがあるとします。

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 を使用しています。

4

1 に答える 1