設定されたタイムアウト期間後に JDBC 接続を閉じる方法はありますか? これらの接続は GenericObjectPool で作成されています。プールがプール内のアイドル状態の接続を閉じることができることは知っていますが、アクティブであると考えられる接続についてはどうでしょうか? 誰かが close() を呼び出さない場合に接続リークを制御しようとしています。私が読んだことから、唯一の方法はサーバーにタイムアウト期間を設定することかもしれませんが、Javaで方法を見つけたいと思っています。ありがとうございました!
質問する
2824 次
2 に答える
1
常に接続を閉じるようにするという Peter Lawrey の意見に同意します。ただし、接続が閉じられていることを確認する必要がある場合 (誰かがプールから取り出して返すのを忘れた場合)、次のようにします。
- プールから返される java.sql.Connection を装飾します。
- コンストラクターでタイマーを作成し、構成された期間に設定して、アクティブな接続を許容します。
- タイマーが起動する前にユーザーが close を呼び出した場合、タイマーをキャンセルして接続をプールに戻します。
- ユーザーが接続を閉じる前にタイマーが起動した場合は、接続をプールに戻し、デコレートされた接続を無効にして、以降の呼び出しで がスローされるようにします
IllegalStateException
。
于 2012-09-13T14:28:03.663 に答える
1
古い Apache コモンズ プールを使用していましたが、新しい Apache Tomcat プールに切り替えました 。実際には、タイムアウト期間後に接続を削除する機能があります。
removeAbandoned - (boolean) removeAbandonedTimout を超えた場合に放棄された接続を削除するフラグ。true に設定すると、removeAbandonedTimeout よりも長く使用されている場合、接続は放棄され、削除の対象と見なされます。これを true に設定すると、接続を閉じることができないアプリケーションからデータベース接続を回復できます。logAbandoned も参照してください。デフォルト値は false です。
于 2012-09-17T13:37:29.787 に答える