Frage

Ich habe eine tomcat-Instanz einrichten, aber die Datenbankverbindung ich habe konfiguriert context.xml hält das sterben nach Perioden der Inaktivität.

Wenn ich die logs bekomme ich folgende Fehlermeldung:

com.mysql.jdbc.Ausnahmen.jdbc4.CommunicationsException:Das Letzte Paket erfolgreich vom server empfangen was68051 Sekunden gemeldet.Das Letzte Paket erfolgreich gesendet an der server wurde 68051 Sekunden vor, die länger ist als der server konfigurierten Wert 'wait_timeout'.Sie sollten entweder auslaufenden und/oder testen Verbindung Gültigkeit vor dem Einsatz in Ihrer Anwendung, die Erhöhung der server konfigurierten Werte für client-timeouts oder mithilfe des Connector/J connection property 'autoReconnect=true' um dieses problem zu vermeiden.

Hier ist die Konfiguration, die in context.xml:

<Resource name="dataSourceName" 
        auth="Container" 
        type="javax.sql.DataSource"
        maxActive="100" 
        maxIdle="30" 
        maxWait="10000" 
        username="username" 
        password="********"
        removeAbandoned = "true"
        logAbandoned = "true"
        driverClassName="com.mysql.jdbc.Driver" 
        url="jdbc:mysql://127.0.0.1:3306/databasename?autoReconnect=true&amp;useEncoding=true&amp;characterEncoding=UTF-8"  />

Ich bin mit autoReconnect=true wie der Fehler sagt, zu tun, aber die Verbindung hält sterben.Ich habe nie gesehen, dass dies geschieht, bevor.

Ich habe auch überprüft, dass alle Datenbank-verbindungen werden richtig geschlossen.

War es hilfreich?

Lösung

In Der Tomcat-Dokumentation

DBCP verwendet die Jakarta-Commons-Datenbank-Verbindungspool.Er beruht auf der Anzahl der Jakarta-Commons-Komponenten:

* Jakarta-Commons DBCP
* Jakarta-Commons Collections
* Jakarta-Commons Pool

Dieses Attribut kann Ihnen helfen.

removeAbandonedTimeout="60"

Ich bin mit dem gleichen Verbindungs-pooling Zeug, und ich werde diese Eigenschaften verhindern, dass die gleiche Sache, es ist einfach nicht so konfiguriert, durch tomcat.Aber wenn das erste, was nicht funktioniert, versuchen diese.

testWhileIdle=true
timeBetweenEvictionRunsMillis=300000

Andere Tipps

Nur um zu klären, was ist eigentlich die Ursache dieser.MySQL standardmäßig beendet offenen verbindungen nach 8 Stunden der Inaktivität.Allerdings werden die Datenbank-Verbindungs-pool behalten verbindungen für mehr als das.

So durch Einstellung timeBetweenEvictionRunsMillis=300000 weisen Sie die Verbindungs-pool ausgeführt durch Anschlüsse und entfernen, und schließen Sie im Leerlauf alle 5 Minuten.

Die removeAbandoned option ist veraltet, da von DBCP 1.2 (obwohl noch vorhanden in der 1,3-Zweig). Hier's ist eine nicht-offizielle Erklärung.

Ich weiß nicht, ob die obige Antwort ist im Grunde die gleiche Sache, aber einige unserer Systeme verwenden Sie die DB-Verbindung, etwa einmal pro Woche, und ich habe gesehen, dass wir bieten eine -Otimeout flag oder so etwas in der Art zu mysql zu setzen Sie den timeout der Verbindung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top