Mysql
 sql >> Datenbank >  >> RDS >> Mysql

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:Keine Operationen erlaubt, nachdem die Verbindung geschlossen wurde

Wie @swanliu betonte, ist dies auf eine schlechte Verbindung zurückzuführen.
Bevor ich jedoch das Server-Timing und das Client-Timeout anpasse, würde ich zuerst versuchen, eine bessere Verbindungspooling-Strategie zu verwenden.

Verbindungspooling

Hibernate selbst gibt zu, dass seine Connection-Pooling-Strategie minimal ist

Ich persönlich verwende C3P0 . Es sind jedoch andere Alternativen verfügbar, einschließlich DBCP .
Auschecken

Unten ist eine minimale Konfiguration von C3P0, die in meiner Anwendung verwendet wird:

<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 --> 

Bearbeiten:
Ich habe die Konfigurationsdatei aktualisiert (Referenz ). ), da ich die für mein Projekt zuvor einfach kopiert und eingefügt hatte. Das Timeout sollte das Problem idealerweise lösen. Wenn das bei Ihnen nicht funktioniert, gibt es eine teure Lösung die Sie sich meiner Meinung nach ansehen könnten:

Erstellen Sie eine Datei „c3p0.properties“, die sich im Stammverzeichnis des Klassenpfads befinden muss (d. h. es gibt keine Möglichkeit, sie für bestimmte Teile der Anwendung zu überschreiben). (Referenz )

# c3p0.properties
c3p0.testConnectionOnCheckout=true

Bei dieser Konfiguration wird jede Verbindung vor der Verwendung getestet. Dies kann jedoch die Leistung der Website beeinträchtigen.