Mamy api, który używa hibernacji jako narzędzia ORM i używamy c3p0 jako funkcji obsługi puli połączeń. Nie mamy problemów, gdy jesteśmy pod obciążeniem. Jednak kończymy na "nie można uzyskać połączenia" wyjątków, gdy interfejs API był nieaktywny przez dzień lub dłużej. Jeśli więc żaden organ nie użyje interfejsu API w ciągu weekendu, otrzymamy błędy połączenia w poniedziałek rano.Czas oczekiwania na połączenie po okresie nieaktywności
Caused by: java.sql.SQLException: An attempt by a client to checkout a Connection has timed out.
Używamy mysql jako bazy danych. Podczas moich badań dowiedziałem się, że mój serwer bazy danych powoduje, że połączenia są nieaktualne po około 8 godzinach. Może się zdarzyć, że pula połączeń podaje nieaktualne połączenie z klientem, a tym samym wyjątki czasu połączenia dla klienta.
Obecnie nie mamy żadnych testów połączeń skonfigurowanych w C3Po. Powiedzmy, że jeśli użyję IdleTestPeriod do przetestowania połączenia, zanim zostaną one przekazane klientowi przez pulę. Co się stanie, jeśli wszystkie moje połączenia zakończą test w określonym momencie? Czy te nieudane połączenia zostaną usunięte z puli i nowe aktywne połączenia będą generowane ponownie?
Obecnie jest to ustawienie c3p0, którego używamy. Jakiekolwiek inne przyczyny tego problemu?
<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>
Dzięki za pomoc