Java + Tomcat, sterbende Datenbankverbindung?

stimmen
13

Ich habe eine Tomcat-Instanz Setup, aber die Datenbankverbindung I in context.xml so konfiguriert haben, hält nach Zeiten der Inaktivität zu sterben.

Wenn ich die Protokolle überprüfen erhalte ich folgende Fehlermeldung:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Das letzte Paket erfolgreich vom Server empfangen vor was68051 Sekunden. Das letzte Paket erfolgreich an den Server war vor 68.051 Sekunden gesendet, der länger ist als der Server konfiguriert Wert von ‚wait_timeout‘. Sie sollten entweder auslaufende und / oder Testverbindung Gültigkeit vor der Verwendung in Ihrer Anwendung berücksichtigen, den Server konfigurierten Werte für die Client-Timeouts zu erhöhen oder mit dem Connector / J-Verbindungseigenschaft ‚autoReconnect = true‘, dieses Problem zu vermeiden.

Hier ist die Konfiguration 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 = ture wie der Fehler zu tun, sagen, aber die Verbindung hält sterben. Ich habe noch nie zuvor gesehen passieren.

Ich habe auch festgestellt, dass alle Datenbankverbindungen richtig geschlossen werden.

Veröffentlicht am 19/08/2008 um 11:17
quelle vom benutzer
In anderen Sprachen...                            


4 antworten

stimmen
8

Tomcat Dokumentation

DBCP verwendet die Jakarta-Commons-Datenbank Connection Pool. Es 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 benutze die gleiche Connection Pooling Sachen und ich bin Einstellung dieser Eigenschaften die gleiche Sache zu verhindern, dass es ist einfach nicht durch tomcat konfiguriert. Aber wenn das erste, was nicht funktioniert, versuchen Sie diese.

testWhileIdle=true
timeBetweenEvictionRunsMillis=300000
Beantwortet am 19/08/2008 um 14:40
quelle vom benutzer

stimmen
5

Nur um zu klären, was tatsächlich diese verursacht. MySQL standardmäßig beendet offene Verbindungen nach 8 Stunden Inaktivität. Allerdings wird der Datenbankverbindungspool behält Verbindungen für mehr als das.

Also, indem Sie timeBetweenEvictionRunsMillis = 300000 Sie anweist, den Verbindungspool durch Verbindungen laufen und vertreiben und stillstehenden alle 5 Minuten zu schließen.

Beantwortet am 16/09/2008 um 17:12
quelle vom benutzer

stimmen
1

Die removeAbandoned Option wird als von DBCP 1.2 (obwohl veraltet noch vorhanden in dem 1,3 - Zweig). Hier ist eine nicht-offizielle Erklärung.

Beantwortet am 09/02/2009 um 14:21
quelle vom benutzer

stimmen
0

Ich weiß nicht, ob die obige Antwort tut im Grunde die gleiche Sache, aber einige unserer Systeme nutzen die DB-Verbindung etwa einmal pro Woche, und ich habe gesehen, dass wir eine -Otimeout Flagge oder etwas dieser Art bieten MySQL die Verbindung zu setzen Auszeit.

Beantwortet am 19/08/2008 um 20:06
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more