2012-04-16 12 views
13

Ich bin neu in c3op und verwirrt über die Verwendung von:Die Verwendung von c3p0.idle_test_period.

c3p0.idle_test_period 

In diesem Link: 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. 

Was ist der Zweck dieser Art von Test ist (Idel, Pool-Verbindungen) und die Beziehung zwischen c3p0.idle_test_period und c3p0.timeout?

Antwort

23

Der Datenbankserver kann nach einer gewissen Zeit eine Verbindung auf seiner Seite schließen - was zu einem Fehler in der Anwendung führt, da versucht wird, eine Abfrage für eine Verbindung zu senden, die auf der Serverseite nicht mehr verfügbar ist.

Um dies zu vermeiden, können Sie den Pool in regelmäßigen Abständen eine Verbindung überprüfen lassen (Denken Sie an einen Ping) für seine Gültigkeit. Dies ist, was idle_test_period ist für.

timeout ist die Zeitspanne, nach der der Pool eine Verbindung aus dem Pool entfernt, da die Verbindung für eine Weile nicht ausgecheckt (verwendet) wurde und der Pool mehr Verbindungen als c3pO.min_size enthält.

+8

Bitte beachten Sie, dass der Wert hibernate.c3p0.idle_test_period niemals den Wert von hibernate.c3p0.timeout überschreiten darf. Andernfalls erkennt C3P0 niemals Verbindungen, die geschlossen wurden. – MichaelCleverly

+0

@MichaelCleverly Ich nehme an, in diesem Fall würde es nur Verbindungen aus dem Pool entfernen, anstatt sie auf Lebendigkeit zu prüfen ... es lohnt sich, es zu realisieren, aber nicht unbedingt ein "Muß nie" denkt mich :) – rogerdpack

+0

Eine schlechte Verbindung kann passieren Es gibt mehr Gründe als das Server-Side-Idle-Timeout - es gibt HA-Layer, die es auslösen können, wenn beispielsweise ein Failover auftritt. –

-1

Ich denke, diese Einstellung wird im Ruhezustand verwendet, um gepoolte Verbindung nach alle paar Sekunden zu überprüfen. Stellen Sie sich ein Szenario vor, wenn auf der Datenbankseite das Passwort geändert wird. Hibernate hat bereits Verbindungen mit altem Kennwort zusammengefasst. Es ist also Sicherheitslücke mit Pool mit falschem Passwort. So, wenn der Ruhezustand nach wenigen Sekunden validiert wird. Es wird diese gepoolte Verbindung ungültig machen.