Richtige Methode, um gepoolte Verbindungen bei längerer Inaktivität für die MySQL, Grails 2-App am Leben zu erhalten (oder das Zeitlimit zu überschreiten und neue Verbindungen zu erhalten)

Ich besitze eine Grails-App, in der es zu heftigen Aktivitätsschwankungen kommt, die dann aber häufig mehrere Stunden bis über Nacht dauern können. Ich stelle fest, dass die ersten Benutzer am Morgen die folgenden Ausnahmebedingungen erhalten, und ich glaube, dies liegt daran, dass die Verbindungen im Pool veraltet sind und die MYSql-Datenbank sie schließt.

Ich habe in Googling widersprüchliche Informationen darüber gefunden, ob die Verwendung der Connector / J-Verbindungseigenschaft 'autoReconnect = true' eine gute Idee ist (und ob der Client auch dann noch eine Ausnahme erhält, wenn die Verbindung wiederhergestellt wird) oder ob sie festgelegt werden soll andere Eigenschaften, die in regelmäßigen Abständen inaktive Verbindungen entfernen oder aktualisieren, auf Ausleihe testen usw. Grails verwendet DBCP darunter. Ich habe derzeit eine einfache Konfiguration wie folgt und suche nach einer Antwort, wie am besten sichergestellt werden kann, dass eine Verbindung, die nach einer langen inaktiven Zeit aus dem Pool entfernt wurde, gültig und nicht geschlossen ist.

dataSource {
        pooled = true
        dbCreate = "update"
        url = "jdbc:mysql://my.ip.address:3306/databasename"
        driverClassName = "com.mysql.jdbc.Driver"
        dialect = org.hibernate.dialect.MySQL5InnoDBDialect
        username = "****"
        password = "****"
        properties {
          //what should I add here?
          }
    }

Ausnahme

    2012-06-20 08:40:55,150 [http-bio-8443-exec-1] ERROR transaction.JDBCTransaction  - JDBC begin failed
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 64,129,968 milliseconds ago.  The last packet sent successfully to the server was 64,129,968 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116)
    at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3851)
    ...... Lots more .......
Caused by: java.sql.SQLException: Already closed.
    at org.apache.commons.dbcp.PoolableConnection.close(PoolableConnection.java:114)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage