Verbindungs-Timeout tritt nach Inaktivitätszeitraum auf

Wir haben eine API, die den Ruhezustand als ORM-Tool verwendet, und wir verwenden c3p0 als Verbindungspool-Handler. Unter Last haben wir keine Probleme. Es kommt jedoch zu Ausnahmen, dass keine Verbindung hergestellt werden kann, wenn die API für einen Tag oder länger inaktiv war. Wenn also am Wochenende kein Benutzer die API verwendet, treten am Montagmorgen Verbindungsfehler auf.

Caused by: java.sql.SQLException: An attempt by a client to checkout a Connection has timed out.

Wir verwenden MySQL als Datenbank. Bei meinen Nachforschungen habe ich erfahren, dass mySQL Verbindungen nach ungefähr 8 Stunden veraltet macht. Es ist möglich, dass der Verbindungspool eine veraltete Verbindung zum Client ausgibt, und daher die Ausnahmen für das Verbindungszeitlimit für den Client.

Derzeit sind keine Verbindungstests in C3Po konfiguriert. Sagen wir, wenn ich IdleTestPeriod verwende, um die Verbindung zu testen, bevor sie dem Client vom Pool übergeben werden. Was passiert dann, wenn alle meine Verbindungen den Test zu einem bestimmten Zeitpunkt nicht bestehen? Werden diese fehlgeschlagenen Verbindungen aus dem Pool entfernt und neue aktive Verbindungen erneut generiert?

Dies sind derzeit die von uns verwendeten c3p0-Einstellungen. Gibt es noch andere Gründe für dieses Problem?

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="${----}"/>
        <property name="jdbcUrl" value="${----}"/>
        <property name="user" value="${----}"/>
        <property name="password" value="${------}"/>
        <property name="minPoolSize" value="5"/>
        <property name="acquireIncrement" value="5" />
        <property name="maxPoolSize" value="125" />
        <property name="maxStatements" value="10" />
        <property name="maxIdleTime" value="180" />
        <property name="maxIdleTimeExcessConnections" value="30" />
        <property name="checkoutTimeout" value="3000" />
        <property name="preferredTestQuery" value="SELECT 1" />
    </bean>

Danke für die Hilfe

Antworten auf die Frage(2)

Ihre Antwort auf die Frage