1

このインタビューの質問に出くわしました: データベース接続プールをどのように管理しますか? 私の考えは、次のとおりです。ArrayBlockingQueue<Connection>,作成された接続オブジェクトを作成し、ajvm の起動時にそれらをキューに入れます。次に、これを何らかの形式の enum シングルトンでラップして、そのようなキューが 1 つだけ存在し、JVM の存続期間中存続するようにします。

次に、キューから接続を受け取り、それらをキューに戻す何らかのユーティリティ/ドライバ クラスを使用します。

私はこれに他に何を言う必要があるか考えていますか?複数のリクエストが同じ接続を持たないように、キューをスレッドセーフにする必要がありますか?

4

1 に答える 1

0

私の意見では、ここでいくつかの点が欠けています:

  1. プールに戻るときは、接続を初期状態に戻す必要があります。たとえば、connection.setAutocommit(...); 絶対に元に戻すべき

  2. ネイティブ接続を javax.sql.Connection インターフェイスの独自の実装にラップして、接続で実行されるアクションを制御および監視することはお勧めできません。このパターンを使用すると、貴重な機能を実装することもできます。close() で接続をプールに戻します。電話

  3. 実際のプール使用率に基づいてプール内の接続数を制御するには、いくつかの手段が必要です。「容量」と「負荷率」がJavaコレクションにどのように実装されているかを見て、大まかな実装のアイデアを得る

  4. 接続が生きているかどうかを監視する必要があります。考えられるすべてのデータベースをアーカイブするのはそれほど簡単ではありません。

于 2013-08-28T18:21:28.767 に答える