para descargar conexiones mysql hibernate

mysql - descargar - pool de conexiones oracle



¿Por qué las conexiones de Hibernate/JDBC/MySQL caen después de un día más o menos? (4)

Tengo varios procesos de servidor que de vez en cuando responden a los mensajes de los clientes y realizan transacciones de solo lectura.

Después de unos pocos días que los servidores se están ejecutando, dejan de funcionar correctamente y, cuando lo miro, resulta que hay un montón de mensajes sobre la conexión que se está cerrando.

Cuando lo revisé, resultó que la hibernación funciona de manera predeterminada en algún tipo de modo de desarrollo donde las conexiones se eliminan después de unas horas, y comencé a usar c3po para la agrupación de conexiones.

Sin embargo, incluso con c3po, tengo ese problema alrededor de 24 horas más o menos después de que se inicien los servidores.

¿Alguien ha encontrado ese problema y sabe cómo abordarlo? No estoy lo suficientemente familiarizado con las complejidades de configurar hibernate.


El controlador de MySQL JDBC expira después de 8 horas de inactividad y elimina la conexión.

Puede establecer autoReconnect=true en su URL JDBC, y esto hace que el controlador se vuelva a conectar si intenta consultar después de desconectarse. Pero esto tiene efectos secundarios; por ejemplo, el estado de la sesión y las transacciones no se pueden mantener a través de una nueva conexión.

Si usa autoReconnect , se restablece la conexión JDBC, pero no vuelve a ejecutar automáticamente su consulta que obtuvo la excepción. Por lo tanto, debe detectar SQLException en su aplicación y volver a intentar las consultas.

Lea http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.html para obtener más detalles.


Sugeriría que, en casi cualquier configuración de cliente / servidor, es una mala idea dejar las conexiones abiertas cuando no las necesiten.

Estoy pensando específicamente en las conexiones DB2 / z, pero se aplica por igual a todos los servidores (base de datos y de otro tipo). Estas conexiones consumen recursos en el servidor que podrían ser mejor utilizados en otros lugares.

Si tuviera que mantener las conexiones abiertas en un entorno corporativo en el que decenas de miles de clientes se conectan a la base de datos, es probable que incluso ponga de pie una computadora central.

Estoy a favor de la idea de la agrupación de conexiones, pero no tanto por la idea de tratar de mantener sesiones individuales abiertas para siempre.

Mi consejo sería el siguiente:

1 / Tiene tres tipos de conexiones en su grupo de conexiones:

  • cerrado (por lo que en realidad no está en su grupo).
  • listo, es decir, abierto pero no en uso por un cliente.
  • activo, es decir, en uso por un cliente.

2 / Haga que su agrupación de conexiones mantenga un número pequeño de conexiones listas, se puede ajustar un mínimo de N y un máximo de M. N dependiendo de la velocidad máxima a la que sus clientes soliciten conexiones. Si el número de conexiones listas cae alguna vez a cero, necesita una N.

3 / Cuando un cliente desea una conexión, proporciónele una de las listas (activada), luego abra una nueva inmediatamente si ahora hay menos de N lista (pero no haga que el cliente espere que se complete, o perderá la ventaja de la puesta en común). Esto asegura que siempre habrá al menos N conexiones preparadas. Si ninguno está listo cuando el cliente quiere uno, tendrán que esperar mientras usted crea uno nuevo.

4 / Cuando el cliente finaliza con una conexión activa, regrésela al estado listo si hay menos de M conexiones preparadas. De lo contrario, ciérralo. Esto le impide tener más de M conexiones preparadas.

5 / Recicle periódicamente las conexiones listas para evitar conexiones obsoletas. Si hay más de N conexiones preparadas, solo cierre la conexión más antigua. De lo contrario, ciérrelo y vuelva a abrir otro.

Esto tiene la ventaja de tener suficientes conexiones preparadas y juveniles disponibles en su grupo de conexiones sin sobrecargar el servidor.


Cambié el archivo de configuración de hibernación agregando esas líneas y funciona por ahora:

<property name="connection.autoReconnect">true</property> <property name="connection.autoReconnectForPools">true</property> <property name="connection.is-connection-validation-required">true</property>

Creo que usar el pool c3p0 es mejor y más recomendable, pero esta solución está funcionando por el momento y no presenta ningún problema.
Dejé el Tomcat encendido durante 24 horas y la conexión no se perdió.
Por favor pruebalo .


MySql básicamente expira por defecto en 8 horas .

Obtuve la misma excepción y resolví el problema después de 3 agitados días. Comprueba si estás usando I hibernate3. En esta versión, se requiere mencionar explícitamente el nombre de la clase de conexión. También verifique si el jar está en classpath. Ver pasos y comentarios en el siguiente enlace

http://hibernatedb.blogspot.com/2009/05/automatic-reconnect-from-hibernate-to.html

Eliminar autoReconnect=true