Usted realmente debe ir para la conexión C3P0 puesta en común: http://www.mchange.com/projects/c3p0/index.html#hibernate-specific
Hay una sección en la documentación C3P0 sobre ese tema: http://www.mchange.com/projects/c3p0/index.html#configuring_recovery
Primero hay que configurar correctamente c3p0, que en el caso de la utilización de hibernación debe suceder en el archivo c3p0.properties.
En sus c3p0.properties poner estas propiedades para volver a intentar volver a conectarse de forma indefinida cada 3 segundos cuando la base de datos está abajo:
c3p0.acquireRetryAttempts = 0
c3p0.acquireRetryDelay = 3000
c3p0.breakAfterAcquireFailure = false
Además, para evitar interrupciones en las comunicaciones tumbado en su piscina de forma indefinida, utilice gestión de la edad conexión:
c3p0.maxConnectionAge = 6000
c3p0.maxIdleTime = 6000
c3p0.maxIdleTimeExcessConnections = 1800
c3p0.idleConnectionTestPeriod = 3600
Estos pueden ser bastante caro, pero muy útil si lo anterior no es suficiente:
c3p0.testConnectionOnCheckout = true
c3p0.preferredTestQuery = SELECT 1;
También es posible que desee comprobar si hay fugas de conexión que impiden la recuperación:
c3p0.debugUnreturnedConnectionStackTraces = true
Y, por último, asegúrese de que C3P0 se engancha con la hibernación correctamente, habilitar el registro de depuración para el paquete "com.mchange" y ver si dice C3P0 Tienes algo sobre sí mismo. Debe indicar las propiedades de configuración que están cargadas, así que vea si está todo allí.
Espero que esto ayude.
Sí, este fue mi primer paso. Pero no funcionó. Hice todo lo que estás hablando pero sin resultado. El probador del conjunto de conexiones C3p0 no se llama si DB está inactivo. Si DB está funcionando y comencé la aplicación cuando el probador también está funcionando, veo que es capaz de verificar el estado de la conexión. Pero quiero saber qué hacer en caso de que DB no funcione. Quise decir que la aplicación intentó crear un conjunto de conexiones pero sin éxito, después de algún tiempo intentará hacerlo una vez más. – Andrey
Si su DB está inactivo, lo intentará de nuevo para adquirir Reintentar tiempos de inactividad, con un retraso de adquirir Reintentos entre cada intento y después de eso probablemente resultará en una excepción. –
Sí, esto es lo que veo. Hibernate intenta volver a conectar las horas de acquireRetryAttempts con la retención de acquireRetryDelay, pero después no hay ninguna excepción. Y no entiendo cómo entender está hibernate conectado o no a DB. – Andrey