2012-04-16 13 views
13

私はc3opする新しい、との使用について困惑している:このリンクでc3p0.idle_test_periodの使用。

c3p0.idle_test_period 

HowTo configure the C3P0 connection pool

idleTestPeriod : Must be set in hibernate.cfg.xml (or hibernate.properties), Hibernate default: 
0, If this is a number greater than 0, c3p0 will test all idle, pooled but unchecked-out 
connections, every this number of seconds. 

テスト(IDEL、プールされた接続)のこの種の目的は何ですかc3p0.idle_test_periodとc3p0.timeoutの関係は?

答えて

23

データベースサーバーは、サーバー側で使用できなくなった接続でクエリを送信しようとするため、アプリケーションに何らかのエラーを引き起こして一定時間が経過すると、その側の接続を閉じることがあります。

これを避けるには、プールが接続を定期的にチェックするようにすることができます(pingと思ってください)。これはidle_test_periodが対象です。

timeoutは、接続がしばらくチェックアウトされず(使用されていない)、プールにc3pO.min_sizeより多くの接続が含まれているため、プールが接続をプールから削除します。

+8

hibernate.c3p0.idle_test_periodの値は、hibernate.c3p0.timeoutの値を決して超えないように注意してください。そうしないと、C3P0は閉じられた接続を検出しません。 – MichaelCleverly

+0

@MichaelCleverlyその場合、プールからの接続を削除するのではなく、生き生きとしているかどうかを確認するだけです。確かに実現する価値がありますが、必ずしも「決して」必要はありません。 – rogerdpack

+0

接続が悪いサーバ側のアイドルタイムアウトよりも多くの理由があります。たとえば、フェールオーバーが発生したときにそれを起動できるHAレイヤがあります。 –

-1

この設定は、数秒ごとにプールされた接続を検証するために、休止状態で使用されると思います。データベース側でパスワードが変更された場合のシナリオを考えてみましょう。 Hibernateはすでに古いパスワードで接続をプールしました。したがって、間違ったパスワードを持つプールを持つセキュリティ侵害です。休止状態が数秒後に検証されます。プールされた接続は無効になります。

関連する問題