2012-03-12 9 views
5

Ocasionalmente, mi aplicación Java/Tomcat6/Debian Squeeze no puede comunicarse con el servidor MySql. La aplicación Tomcat está en un servidor de aplicaciones para el usuario y MySql está en un cuadro separado, MySql-only. Un error típico es:Tiempo de espera de MySql JDBC incluso con 'autoReconnect = true'

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was56588 milliseconds ago. 

The last packet sent successfully to the server was 56588 milliseconds ago, which 
is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the 
server configured values for client timeouts, or using the Connector/J connection property 
'autoReconnect=true' to avoid this problem. 

El tiempo de espera dado es de tan solo 60 segundos, lo que parece muy corto. Si fue una hora o más, simplemente configuré una tarea en segundo plano para hacer ping al servidor DB cada pocos minutos. Agregué el parámetro autoReconnect a la URL de apertura, sin impacto obvio.

¿Alguna idea de cuál es el problema aquí? Gracias Pat

+1

ver este post http://stackoverflow.com/q/667289/778687 – tusar

+0

@tusar, gracias por el enlace. Explica por qué tengo mucho código para escribir. Es interesante que están desaprobando la reconexión automática. – fishtoprecords

+0

¿en qué se establece wait_timeout en el servidor? –

Respuesta

0

Debe codificar fallas de red y hacer frente a la reconexión automática usted mismo.

la reconexión automática está DESACTIVADA deliberadamente debido a varios errores de "aplicación" que pueden ocurrir silenciosamente cuando la conexión desaparece y regresa en un estado diferente .

De todos modos, un comentario muestra que esto es algo así como una pregunta duplicada.

0

Configure las propiedades de c3p0 para solucionar este problema. Usar las propiedades como,

hibernate.connection.provider_class=org.hibernate.connection.C3P0ConnectionProvider 
hibernate.c3p0.min_size=0 
hibernate.c3p0.max_size=20 
hibernate.c3p0.timeout=500 
hibernate.c3p0.max_statements=50 
hibernate.c3p0.idle_test_period=3000 
hibernate.c3p0.testConnectionOnCheckout=true 
hibernate.c3p0.acquire_increment=1 

con URL de conexión JDBC url=jdbc:mysql://host/databasename?autoReconnect=true

+0

'autoReconnect' está en desuso y no se recomienda (consulte la descripción de la propiedad en [Referencia de Connector/J] (https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration) -properties.html # connector-j-reference-set-config) o la nota al final de [sección 15.4] (https://dev.mysql.com/doc/connector-j/5.1/en/connector-j -usagenotes-troubleshooting.html # qandaitem-15-1-4) del capítulo de solución de problemas) desde al menos [2004] (https://bugs.mysql.com/bug.php?id=5020). – vilpan

Cuestiones relacionadas