Mysql
 sql >> Database >  >> RDS >> Mysql

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:nessuna operazione consentita dopo la chiusura della connessione

Come ha sottolineato @swanliu, è dovuto a una cattiva connessione.
Tuttavia, prima di regolare i tempi del server e il timeout del client, proverei prima a utilizzare una migliore strategia di pooling delle connessioni.

Collegamento di connessioni

Hibernate stesso ammette che la sua strategia di pool di connessioni è minima

Personalmente uso C3P0 . tuttavia sono disponibili altre alternative tra cui DBCP .
Guarda

Di seguito è riportata una configurazione minima di C3P0 utilizzata nella mia applicazione:

<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="c3p0.acquire_increment">1</property> 
<property name="c3p0.idle_test_period">100</property> <!-- seconds --> 
<property name="c3p0.max_size">100</property> 
<property name="c3p0.max_statements">0</property> 
<property name="c3p0.min_size">10</property> 
<property name="c3p0.timeout">1800</property> <!-- seconds --> 

Modifica:
Ho aggiornato il file di configurazione (Riferimento ), poiché avevo appena copiato e incollato quello per il mio progetto in precedenza. Il timeout dovrebbe idealmente risolvere il problema, se non funziona per te c'è una soluzione costosa a cui penso potresti dare un'occhiata:

Crea un file "c3p0.properties" che deve trovarsi nella radice del percorso di classe (cioè non c'è modo di sovrascriverlo per parti particolari dell'applicazione). (Riferimento )

# c3p0.properties
c3p0.testConnectionOnCheckout=true

Con questa configurazione ogni connessione viene testata prima di essere utilizzata. Potrebbe tuttavia influire sulle prestazioni del sito.