2012-04-16 25 views
13

Soy nuevo en c3op y confundido sobre el uso de:El uso de c3p0.idle_test_period.

c3p0.idle_test_period 

En este enlace: 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. 

Cuál es el propósito de este tipo de prueba (IDEL, conexiones agrupadas) , y la relación entre c3p0.idle_test_period y c3p0.timeout?

Respuesta

23

El servidor de la base de datos puede cerrar una conexión después de un cierto período de tiempo, causando un error en su aplicación, porque intentará enviar una consulta a una conexión que ya no está disponible en el servidor.

Para evitar esto, puede permitir que el grupo revise periódicamente una conexión (Piense en un ping) para su validez. Esto es para lo que es idle_test_period.

timeout es el intervalo de tiempo después del cual el grupo eliminará una conexión del grupo, debido a que la conexión no se controló (utilizó) durante un tiempo y el grupo contiene más conexiones que c3pO.min_size.

+8

Tenga en cuenta que el valor de hibernate.c3p0.idle_test_period nunca debe exceder el de hibernate.c3p0.timeout. De lo contrario, C3P0 nunca detectará conexiones que se hayan cerrado. – MichaelCleverly

+0

@MichaelCleverly Supongo que en ese caso simplemente eliminaría las conexiones de la agrupación en lugar de revisarlas en busca de vitalidad ... vale la pena darme cuenta con certeza, pero no necesariamente un "nunca debo" pensar :) – rogerdpack

+0

Una conexión que puede pasar mal para más razones que el tiempo de inactividad de inactividad del lado del servidor: hay capas de HA que pueden activarlo cuando se produce una conmutación por error, por ejemplo. –

-1

Creo que esta configuración se usa en hibernación para validar la conexión agrupada cada pocos segundos. Considere un escenario si en el lado de la base de datos, se cambia la contraseña. Hibernate ya ha agrupado las conexiones en la contraseña anterior. Por lo tanto, es una violación de seguridad que tiene un grupo con una contraseña incorrecta. Por lo tanto, cuando hibernate se validará después de unos segundos. Invalidará esa conexión mancomunada.

Cuestiones relacionadas