1

私たちのプロジェクトでは、独自の DB 接続プールを維持しています。
この問題を解決するには、'java.sql.SQLRecoverableException: Io exceptionほとんどの人が apache dbcp のような標準の接続プールを使用することを提案しています。

  • 接続のリセット中に標準のプーリングメカニズムが実行するロジックは何ですか?
  • DBConnectionPool は、DB 接続がタイムアウトしたことをどのように認識しますか? ここでは conn.isClosed() が役に立たないことを知っているからです。
  • 各db接続には、DBサーバーとの1つのtcpクライアントソケットがありますか?
  • 最後に、お勧めです。接続をプールに戻すたびに。プールは接続を閉じる必要があります。接続が返されてから 10 分以上存在する場合は? [~10 分のサーバー側接続タイムアウト変数]

私のすべての質問に親切に答えてください。

4

1 に答える 1

2

org.apache.commons.pool.impl.GenericObjectPoolorg.apache.commons.dbcp.DataSourceConnectionFactoryorg.apache.commons.dbcp.PoolableConnectionFactoryおよびorg.apache.commons.dbcp.PoolingDataSourceクラスを使用して接続プールに Apache DBCP を使用したと仮定して、この質問に答えています。

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