2010-01-16 5 views
39

Ich lese diesen Rat von Fehlermeldung:Verbindung mit MySql wird automatisch abgebrochen. Wie konfiguriere ich Connector/J richtig?

Sie entweder in Betracht ziehen sollten und/oder Testverbindung Gültigkeit vor der Verwendung in Ihrer Anwendung ablaufen, Erhöhung des Server Werte für die Client-Timeouts konfiguriert oder mit der Connector/J-Verbindungseigenschaft 'autoReconnect = true', um dieses Problem zu vermeiden.

Ich benutze Spring und JPA. Wo sollte ich Connector/J konfigurieren? (? In persistence.xml oder in entityManagerFactory Federkonfiguration oder in dateSource Federkonfiguration oder woanders)

+0

Bitte helfen https://stackoverflow.com/questions/47011116/the-last-packet-sent- successful-to-the-server-was-70-400-003-Millisekunden-ag – Tony

Antwort

54

Der Text beschreibt drei Lösungen Verbindung zu verhindern Abbrüche:

  1. Konfigurieren Sie die Verbindungszeichenfolge mit autoReconnect=true. Dies ist eine Eigenschaft der URL-Verbindungszeichenfolge, die auf der Treiberebene funktioniert. Sie müssen die Verbindungszeichenfolge in der Datenquellenkonfiguration ändern.

    url="jdbc:mysql://localhost:3306/confluence?autoReconnect=true" 
    
  2. Zeitüberschreitung erhöhen. Dies ist normalerweise eine Eigenschaft der Datenbank. Sie können diesen Wert erhöhen, um zu sehen, ob Sie weniger Verbindungsabbruch erhalten.

  3. Konfigurieren Sie den Verbindungspool, um die Verbindung gültig zu testen. Dies geschieht im Pool, nicht auf der Ebene des Fahrers. Dies hängt von der verwendeten Datenquellenimplementierung ab. Es sollte jedoch in der Eigenschaft der Datenquelle konfigurierbar sein, wenn Sie eine gepoolte verwenden, z. c3p0.

Additionnal Kommentare:

  • Die Datenquelle/Pool kann auch ein Timeout, das ein Leerlauf der Zeit entspricht, Verbindung bleibt bestehen ns im Pool. Um nicht mit dem DB-Timeout zu verwechseln.
  • Es gibt mehrere Möglichkeiten, die Gültigkeit einer Verbindung zu testen. Ein üblicher Weg ist ein Dummy-Testtisch. Der Pool gibt eine Auswahl in der Dummy-Testtabelle aus, um festzustellen, ob die Verbindung noch in Ordnung ist.
+6

Der MySQL-Treiber implementiert die Option autoReconnect nicht korrekt. Die erste Anforderung schlägt fehl, und der Treiber versucht, die Verbindung AFTERWARDS wiederherzustellen. – Riking

+1

Da diese Antwort die von der Suchmaschine favorisierte zu sein scheint, wäre es nett, wenn es mit ein paar zusätzlichen Erklärungen, der Bedeutung von wait_timeout für MySQL und wie es mit einer c3p0 Konfiguration spielen soll, kam. Angesichts des Problems kann ich sehen, dass die Wartezeit von MySQL 28800 ist. Wenn das 8h ist, habe ich keine Lust 72h zu sagen. Ich verstehe nicht einmal, wie es akzeptiert werden kann, dass eine Verbindung so lange wie 8h anhängt. – Stephane

+5

@StephaneEybert Ich habe hier eine wirklich schöne Erklärung gefunden: http://hibernatedb.blogspot.in/2009/05/automatic-reconnect-from-hibernate-to.html. Dies kann jemandem in Zukunft helfen – sunil

14

AutoReconnect wird nicht empfohlen. Von MySQL here

Sollte der Fahrer versuchen, veraltete und/oder tote Verbindungen wiederherzustellen? Wenn diese Option aktiviert ist, löst der Treiber eine Ausnahme für eine unter veraltete oder veraltete Verbindung aus, die zur aktuellen Transaktion gehört, versucht jedoch, die Verbindung erneut herzustellen, bevor die nächste Abfrage in einer neuen Transaktion für die Verbindung ausgeführt wird.Die Verwendung dieser Funktion ist nicht empfohlen, da es Nebenwirkungen im Zusammenhang mit Sitzungsstatus und Datenkonsistenz hat, wenn Anwendungen SQLExceptions nicht ordnungsgemäß verarbeiten und nur für die Verwendung verwendet werden, wenn Sie Ihre Anwendung konfigurieren können Behandle SQLExceptions, die aus toten und veralteten Verbindungen resultieren. Alternativ können Sie als letzte Option untersuchen, indem Sie die MySQL-Servervariable "wait_timeout" auf einen hohen Wert von setzen und nicht auf den Standardwert von 8 Stunden.

+4

Also, was dann, wird stattdessen empfohlen? – jackthehipster

+0

Verwenden Sie c3po mit Option testConnectionOnCheckout = true –

+0

@AndersB Ich benutze c3po, aber Fehler weiterhin persist https://stackoverflow.com/questions/47011116/the-last-packet-sent-successfully-to-the-server-was-70 -400-003-Millisekunden-ag – Tony

-8

Dies ist für Leute wie mich, die dieses alte Posting durch die Suchmaschinen finden.

Die anderen Antworten sind besser langfristige Lösungen. Aber wenn Sie nur die mysql Verbindung sofort wieder ausführen müssen, können Sie shutdown dann tomcat und alles wird für eine Weile gut funktionieren. Auf diese Weise können Sie Systemausfälle vermeiden, während Sie eine längerfristige Lösung finden.

Navigieren Sie zu $CATALINA_HOME im terminal, geben Sie dann shutdown.sh ein, und geben Sie startup.sh ein. Warten Sie einige Sekunden, bis die Startsequenz abgeschlossen ist. Danach funktionieren Ihre Apps eine Weile.

+0

Die Frage erwähnte nichts über die Verwendung von Tomcat. – thechrisproject

+0

@thechrisproject Die Frage dreht sich um den Frühling. Tomcat ist der primäre Container, der für das Hosting von Frühlings-Apps verwendet wird. Und die in dieser Antwort beschriebene Methode löst das OP-Problem. – CodeMed

+0

Warum zielen wir auf eine Lösung ab, die langfristig nicht funktioniert? Alle DB-Server und -Verbindungen müssen im Hinblick auf eine langfristige Perspektive konzipiert sein. – sunil

0

Ich wurde durch viele Lösungen gehen und mein Problem wurde gelöst, aber nach einiger Zeit ist die Verbindung Timeout oder getrennt.Nach 2 3 Tagen bekam ich eine Lösung, die mein Problem lösen.

viele lösung vorschlagen zu verwenden autoReconnect = true aber wenn ich durch die docs ging. Ich sah den folgenden Text in der Quelle der autoReconnect Parameter beschreiben:

Die Verwendung dieser Funktion wird nicht empfohlen, da es Nebenwirkungen im Zusammenhang mit Sitzungsstatus und Datenkonsistenz hat

Wenn ich in dem Hibernate Code aussehen. Der grundlegende Verbindungsmechanismus von Hibernate unterstützt das Wiederverbinden nicht, man muss den H3C0-Verbindungspool verwenden (der selbst die Wiederverbindung nicht immer unterstützt hat).

Aber sobald man H3C0 verwendet, scheint das Standardverhalten das zu sein, um eine Anfrage zu verarbeiten, wenn die Verbindung tot ist, dann sieht der Benutzer und Fehler - aber es verbindet sich zumindest für die nächste Anfrage. Ich nehme an, ein Fehler ist besser als unendliche Fehler, aber immer noch nicht so gut wie Null-Fehler. Es stellt sich heraus, dass man den Optionstest ConnectionOnCheckout benötigt - was die Dokumentation nicht empfiehlt, da das Testen der Verbindung vor einer Anfrage zu einer geringeren Leistung führt. Sicherlich muss die Software erstens funktionieren, zweitens muss sie schnell arbeiten.

also zusammenfassen, um eine Verbindung zu bekommen, um „Arbeit“ (die ich definieren, einschließlich Handhabung Verbindungen droppen ohne Fehler wieder anschließen): In „hibernate.cfg.xml“:

<!-- hibernate.cfg.xml --> 
    <property name="c3p0.min_size">5</property> 
    <property name="c3p0.max_size">20</property> 
    <property name="c3p0.timeout">1800</property> 
    <property name="c3p0.max_statements">50</property> 
    <!-- no "connection.pool_size" entry! --> 

Dann erstellen eine Datei „c3p0.properties“, die in der Wurzel des Klassenpfades sein muss (also keine Möglichkeit, sie für bestimmte Teile der Anwendung zu überschreiben):

c3p0.properties

c3p0.testConnectionOnCheckout = true

Wenn diese Lösung nicht funktionieren, als es mehr mögliche Lösungen: -

1. Add 

<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> 

Also dont forget to place the c3p0-0.9.1.jar in the classpath. 



    2. Instead of using that c3p0.properties file, couldn't you just use this property in your hibernate.cfg.xml: 

<property name="hibernate.c3p0.validate">true</property> 

    Also checkout the last post on this page: 

    https://forum.hibernate.org/viewtopic.php?p=2399313 

    If all these not work than go [more][1] and read in detail 


    [1]: http://hibernatedb.blogspot.in/2009/05/automatic-reconnect-from-hibernate-to.html 
Verwandte Themen