0

アプリケーションを使用するクライアントごとにデータベースに対して数十の接続が行われる大規模な Web アプリケーションでは、接続がほとんど閉じられない可能性があると考えていました。すべての接続を明示的に閉じる必要があるかどうかは厳密には私たち次第ですが、間違いがあるかもしれません。これが発生した場合、数日後に、接続プールが最大サイズに達し、アプリケーションが実行されておらず、接続を取得できないことが判明する場合があります。

実際、私は自分のプロジェクトの 1 つでこの問題に直面しており、接続プールが最大サイズに達するたびに、サーバーを再起動するだけでうまくいきません。

この問題をより適切に処理する方法を知りたいのですが、接続プール内の未使用のアクティブな接続をすべて定期的に、たとえば Java コードを使用して 72 時間ごとに明示的に閉じることができるかどうかを知りたいです。 ?

私は Java/J2ee テクノロジーについて話しているのですが、私のサーバーは Glassfish Application Server2.1 です。

編集:サードパーティの接続プールではなく、Glassfish アプリケーションサーバーが提供する接続プールを使用しており、JNDI DataSource を使用してこのプールを使用しています。

あなたの提案が必要です.......

ありがとう

4

2 に答える 2

0

MiniConnectionPoolManager を使用できます。軽量のスタンドアロン Java JDBC 接続プール マネージャーです。

この記事http://www.h2database.com/javadoc/org/h2/jdbcx/JdbcConnectionPool.htmlをご覧ください。そして dispose() メソッド。

多くの jdbc ドライバーがサポートされています http://www.source-code.biz/miniconnectionpoolmanager/

于 2012-09-06T05:59:15.170 に答える
0

これをそのまま提供する優れた接続プーラーがない場合にこの問題に対処する場合、次のようにします。

  1. アプリケーションが接続を取得するための 1 つのエントリ ポイント。
  2. 自己管理プールから取得した接続をデコレートし、設定された値にタイマー セットを関連付けて (未使用のアクティブな接続を閉じるため)、このデコレートされた接続をプールのクライアントに返します。
  3. タイマーが起動する前に close メソッドが呼び出された場合は、タイマーをキャンセルし、呼び出しをラップされた接続に委譲します。
  4. タイマーが起動したときに close メソッドが呼び出されない場合は、ラップされた接続を閉じ、この装飾された接続オブジェクトの状態を無効にしてIllegalStateException、誰かが再び操作しようとしたときにスローされるようにします。

私の2セント!

編集C3P0にはunreturnedConnectionTimeout、プールから取得されたが呼び出しによって返されないこれらの種類の接続を処理するように構成できるものがありますclose()

于 2012-09-06T06:13:33.697 に答える