2012-03-12 2 views
5

Occasionalmente, la mia applicazione Java/Tomcat6/Debian Squeeze non può comunicare con il server MySql. L'applicazione Tomcat si trova su un server front-end e MySql si trova su una casella separata, MySql. Un errore tipico è:Timeout JDBC MySql anche 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. 

Il tempo di timeout indicato è di soli 60 secondi, il che sembra molto breve. Se fosse un'ora o più, avrei semplicemente impostato un'attività in background per eseguire il ping del server DB ogni pochi minuti. Ho aggiunto il parametro autoReconnect all'URL di apertura, senza alcun impatto evidente.

Qualche idea su quale sia il problema? Grazie Pat

+1

vedi questo post http://stackoverflow.com/q/667289/778687 – tusar

+0

@tusar, grazie per il link. Spiega perché ho un sacco di codice da scrivere. Interessante che stiano deprecando la riconnessione automatica. – fishtoprecords

+0

cosa è impostato su wait_timeout sul server? –

risposta

0

Si dovrebbe codificare per problemi di rete e gestire la riconnessione automatica.

la riconnessione automatica è intenzionalmente disattivata a causa di diversi bug di "applicazione" che possono verificarsi in modo invisibile quando la connessione si interrompe e torna in uno stato diverso diverso.

In ogni caso, un commento mostra che si tratta di una domanda in qualche modo duplicata.

0

Configurare le proprietà c3p0 per risolvere questo problema. Utilizzare le proprietà come,

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 connessione JDBC url=jdbc:mysql://host/databasename?autoReconnect=true

+0

'autoReconnect' è deprecato e non raccomandato (vedere la descrizione della proprietà nel [connettore/riferimento 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 alla fine di [sezione 15.4] (https://dev.mysql.com/doc/connector-j/5.1/en/connector-j -usagenotes-troubleshooting.html # qandaitem-15-1-4) del capitolo risoluzione dei problemi) almeno da [2004] (https://bugs.mysql.com/bug.php?id=5020). – vilpan