2012-04-16 16 views
13

Sono nuovo di c3op, e confuso circa l'uso di:L'uso di c3p0.idle_test_period.

c3p0.idle_test_period 

In questo 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. 

Qual è lo scopo di questo tipo di test (Idel, connessioni in pool) e la relazione tra c3p0.idle_test_period e c3p0.timeout?

risposta

23

Il server di database può chiudere una connessione su un lato dopo un certo periodo di tempo, causando alcuni errori nell'applicazione, poiché tenterà di inviare una query su una connessione che non è più disponibile sul lato server.

Per evitare questo, è possibile consentire al pool di controllare periodicamente una connessione (Pensare a un ping) per la sua validità. Questo è ciò che è idle_test_period.

timeout è il periodo dopo che la piscina sarà rimuovere una connessione dal pool, perché la connessione non è stato estratto (usato) per un po 'e la piscina contiene più connessioni c3pO.min_size.

+8

Si prega di tenere presente che il valore hibernate.c3p0.idle_test_period non deve mai superare quello di hibernate.c3p0.timeout. In caso contrario, C3P0 non rileverà mai le connessioni che sono state chiuse. – MichaelCleverly

+0

@MichaelCleverly Suppongo che in tal caso rimuova solo le connessioni dalla piscina invece di controllarle per vivacità ... vale la pena di rendertene conto ma non necessariamente un "mai" penso :) – rogerdpack

+0

Una connessione che va male può accadere per più motivi rispetto al timeout di inattività sul lato server: esistono dei livelli HA che possono attivarlo quando si verifica un failover, ad esempio. –

-1

Penso che questa impostazione sia utilizzata in ibernazione per convalidare la connessione in pool dopo ogni pochi secondi. Considerare uno scenario se sul lato del database, la password è cambiata. Hibernate ha già messo in comune le connessioni sulla vecchia password. Quindi è una violazione della sicurezza avere pool con password errata. Così quando l'ibernazione verrà convalidata dopo pochi secondi. Invaliderà la connessione in pool.

Problemi correlati