org.apache.commons.pool.impl.GenericObjectPool
、org.apache.commons.dbcp.DataSourceConnectionFactory
、org.apache.commons.dbcp.PoolableConnectionFactory
およびorg.apache.commons.dbcp.PoolingDataSource
クラスを使用して接続プールに Apache DBCP を使用したと仮定して、この質問に答えています。
- 接続のリセット中に標準のプーリングメカニズムが実行するロジックは何ですか?
とが true に設定されている場合、 のセットを使用してアクティブであるかどうかに関係なく、接続が検証されます。検証が失敗した場合、接続オブジェクトは削除され、新しい接続オブジェクトが作成されてプールに追加されます
GenericObjectPool.testOnBorrow
GenericObjectPool.testOnReturn
validationQuery
PoolableConnectionFactory
- DBConnectionPool は、DB 接続がタイムアウトしたことをどのように認識しますか? ここでは conn.isClosed() が役に立たないことを知っているからです。上記と同じ仕組み
- 各db接続には、DBサーバーとの1つのtcpクライアントソケットがありますか? はい
- 最後に、お勧めです。接続をプールに戻すたびに。プールは接続を閉じる必要があります。接続が作成されてから 10 分以上存在している場合は? [~10 分のサーバー側の接続タイムアウト変数]不必要なネットワーク トラフィックを作成しないと思われる場合、およびそれを行う特別な理由がある場合。あなたはそれを行うことができます。アイドル時間に基づいて削除する場合と一緒に設定
minEvictableIdleTimeMillis
することによってGenericObjectPool
timeBetweenEvictionRunsMillis