Heim  >  Artikel  >  Datenbank  >  Wie behebe ich den Fehler „com.mysql.jdbc.Exceptions.jdbc4.MySQLNonTransientConnectionException: Keine Operationen zulässig, nachdem die Verbindung geschlossen wurde“ im Ruhezustand?

Wie behebe ich den Fehler „com.mysql.jdbc.Exceptions.jdbc4.MySQLNonTransientConnectionException: Keine Operationen zulässig, nachdem die Verbindung geschlossen wurde“ im Ruhezustand?

Barbara Streisand
Barbara StreisandOriginal
2024-10-27 02:28:02453Durchsuche

How to Fix the

Diagnose des Fehlers „com.mysql.jdbc.Exceptions.jdbc4.MySQLNonTransientConnectionException: Nach dem Schließen der Verbindung sind keine Vorgänge zulässig“

Bei Verwendung des Ruhezustands Bei Remote-Verbindungen kann es aufgrund unterbrochener Verbindungen zu der Fehlermeldung „Nach dem Schließen der Verbindung sind keine Vorgänge zulässig“ kommen. Standardmäßig verfügt MySQL über eine wait_timeout-Einstellung, die dazu führen kann, dass die Verbindung nach einem Zeitraum der Inaktivität geschlossen wird. Dies kann bei längeren Anwendungsläufen oder bei Netzwerkinstabilität passieren.

Verbindungspooling mit C3P0

Um dieses Problem zu beheben, wird empfohlen, eine Verbindungspooling-Bibliothek wie zu verwenden C3P0. Das native Verbindungspooling von Hibernate ist begrenzt und nicht für Produktionsumgebungen geeignet. Durch Verbindungspooling wird ein Pool von Verbindungen erstellt, die von der Anwendung verwaltet und wiederverwendet werden, wodurch der Aufwand für die Einrichtung neuer Verbindungen für jede Abfrage reduziert wird.

C3P0 mit Ruhezustand konfigurieren

Hier eine aktualisierte Konfigurationsdatei mit C3P0:

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/xyz</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.show_sql">false</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.query.factory_class">org.hibernate.hql.ast.ASTQueryTranslatorFactory</property>

<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">3600</property> <!-- seconds -->

In dieser Konfiguration ist der C3P0-Verbindungsanbieter mit den entsprechenden Einstellungen für Poolgröße, Timeout und Verbindungstests aktiviert.

Sonstiges Mögliche Ursachen

Wenn das Problem durch Verbindungspooling nicht behoben wird, lohnt es sich, andere mögliche Ursachen zu untersuchen, wie zum Beispiel:

  • Firewall- oder Netzwerkeinstellungen blockieren Verbindungen
  • MySQL-Konfigurationsprobleme, wie falsche Benutzerberechtigungen oder veralteter JDBC-Treiber
  • Speicher- oder Ressourceneinschränkungen auf dem Server oder der Anwendung

Das obige ist der detaillierte Inhalt vonWie behebe ich den Fehler „com.mysql.jdbc.Exceptions.jdbc4.MySQLNonTransientConnectionException: Keine Operationen zulässig, nachdem die Verbindung geschlossen wurde“ im Ruhezustand?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn