3

新しい DB 接続コードを書いているので、接続プールの実装者として proxool を試してみようと思いました。

通常、プログラマーは、すべての DriverManager.getConnection(...) の後に connection.close() が続くことを確認します。

しかし、Proxool を使用する場合、クローズは必要ですか? 私は混乱しています:

を。ここの proxool のドキュメント ( http://proxool.sourceforge.net/quickStart.html ) には、close() が呼び出されていることが示されていますが、

b. proxool が、プログラムの終了時にすべての接続を閉じるシャットダウン フックを追加することをどこかで読みました。

私のプログラムの最大の関心事はパフォーマンス (最大 200 DB 書き込み/秒) であるため、Proxool の getConnection()/close() がパフォーマンスにどのように影響するかはわかりません。

私の質問は次のとおりです。

  1. close() は必要ですか、それとも Proxool に頼って接続を閉じることができますか?

  2. 毎回明示的に close() を自分で呼び出さなければならない場合、パフォーマンスに悪影響はありませんか?

前もって感謝します。

4

1 に答える 1

7

データベースプールは通常、接続をサブクラス化/装飾するため、close()メソッドがアプリケーションによって呼び出された場合、実際には接続を閉じず、代わりにプールに解放します。これは、毎回新しい接続を確立すると非常にコストがかかる可能性があるため、パフォーマンス上の理由と、ユーザー/接続率を向上させるために行われます。

そうは言っても、を呼び出す必要があるためconnection.close()、プールを使用しなくなったことをプールに知らせ、それを要求する次のスレッドで使用できるようにします。

于 2009-08-14T02:52:23.077 に答える