Ich verwende MYSQL 5.0 und Tomcat 5.5. Nach 8 Stunden schließt MYSQL standardmäßig alle untätigen Verbindungen und ich erhalte eine SQL-Ausnahme, die eine Lösung für dieses Problem darstellt.
Antworten
Zu viele Anzeigen?Welchen Verbindungspool verwenden Sie? Die meisten erlauben die regelmäßige Ausführung eines Heartbeat-Befehls, damit die Verbindungen nicht ins Leere laufen.
EDIT: Ein Blick auf die DBCP-Konfigurationsseite Ich denke, Sie sollten eine angemessene (billige) validationQuery
. Sie könnten dann entweder DBCP anweisen, dies zu testen, wenn möglicherweise inaktive Verbindungen entfernt werden ( testWhileIdle
) oder sagen Sie ihm, dass er kurz vor der Rückgabe der Verbindung testen soll ( testOnBorrow
). Die erste würde (hoffentlich!) Ihre ungenutzten Verbindungen aufrechterhalten; die zweite nicht, aber sie würde Ihnen unterbrochene Verbindungen nicht zurückgeben (d.h. sie würde eine neue herstellen, wenn nötig).
Bei MySQL wird eine offene Verbindung (die oft in einem Verbindungspool wartet) standardmäßig nach 8 Stunden Inaktivität geschlossen. Sie können diese Zeit von 8 Stunden ändern, indem Sie die wait_timeout-Variable entweder in Ihrer my.cnf oder in unserer mysql-Befehlszeile konfigurieren
Siehe: http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_wait_timeout http://dev.mysql.com/doc/refman/5.0/en/gone-away.html
Diese Frage wurde vor ein paar Jahren gestellt, aber ich denke, dass es gut ist, die richtige Antwort zu haben. Ich hatte das gleiche Problem, zu lösen, musste ich mit der Konfiguration ein wenig spielen. hier ist, was für mich funktioniert. Weitergehen https://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html für weitere Informationen. Der unten stehende Code hat alles erledigt. Es gibt Möglichkeiten, die Werte zu optimieren, aber darum werde ich mich später kümmern.
<Resource name="jdbc/database"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="username" password="password"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql:///"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"
testWhileIdle="true"
testOnBorrow="true"
testOnReturn="false"
validationQuery="SELECT 1"
validationInterval="30000"`enter code here`
timeBetweenEvictionRunsMillis="30000"
minIdle="10" `enter code here`
initialSize="10"
removeAbandonedTimeout="60"
removeAbandoned="true"
logAbandoned="true"
minEvictableIdleTimeMillis="30000"
jmxEnabled="true"
/>