Abbiamo una API che utilizza l'ibernazione come strumento ORM e usiamo c3p0 come gestore del pool di connessione. Non abbiamo problemi quando siamo sotto carico. Tuttavia, stiamo esaurendo le eccezioni "impossibile ottenere una connessione" quando l'API è stata inattiva per un giorno circa. Quindi, se nessun corpo usa l'api nel fine settimana, riceviamo errori di connessione lunedì mattina.Collegamenti inattesi dopo il periodo di inattività
Caused by: java.sql.SQLException: An attempt by a client to checkout a Connection has timed out.
Usiamo mysql come database. Sulla mia ricerca, ho avuto modo di sapere che mySQL rende le connessioni obsolete dopo circa 8 ore. Potrebbe essere possibile che il pool di connessioni stia fornendo una connessione obsoleta al client e quindi le eccezioni di timeout della connessione per il client.
Al momento, non è stato configurato alcun test di connessione in C3Po. Diciamo, se uso IdleTestPeriod per testare la connessione prima che siano dati al client dal pool. Allora cosa succede se tutte le mie connessioni falliscono il test in un punto del tempo? Le connessioni non riuscite verranno rimosse dal pool e le nuove connessioni attive verranno nuovamente generate?
Attualmente, queste sono le impostazioni di c3p0 che stiamo utilizzando. Altre possibili ragioni per questo problema?
<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>
Grazie per l'aiuto