Proszę wszystkich o odpowiedź, której nie mogłem znaleźć w dokumencie HikariCP. Biorąc ustawić następujące parametry basenu:W jaki sposób Hikari przetwarza połączenia?
minimumIdle 1
idleTimeout 10 minutes
maxLifeTime 20 minutes
Kiedy moja aplikacja pozostaje bezczynne (z nikim podejmowania wniosków) w nocy, spodziewam Hikari aby zamknąć każde połączenie po 10 minutach od ostatniego żądania połączenia użytkownika, po ostatnie połączenie jest zamknij utwórz nowy (i przytrzymaj go w puli), a następnie zamknij i ponownie utwórz to bezczynne połączenie co 20 minut. Czy dobrze zrozumiałem?
Faktem jest, że po okresie bezczynności w mojej aplikacji, widzę (uppon następnego życzenie) następujący wyjątek:
WARN c.z.hikari.proxy.ConnectionProxy - Connection [email protected] <POOL_NAME> marked as broken because of SQLSTATE(08003), ErrorCode(17008).
java.sql.SQLRecoverableException: Closed Connection
Połączenie prawdopodobnie został zamknięty przez Oracle i nie może być używany. Spróbuję tego uniknąć, korzystając z powyższej konfiguracji. Inną kwestią jest to, że nie rozumiem, dlaczego otrzymuję zamknięte połączenie z puli. To nie powinno się zdarzyć, ponieważ Hikari testuje stan połączenia przed jego zwrotem ...
Uwaga: Nie jestem właścicielem bazy danych, nie mogę jej skonfigurować ani pozwolić na jej rekonfigurację w celu dostosowania do moich potrzeb. Nie mam również dostępu do jego konfiguracji.
Nasz set-up jest Wiosna 4.1.6, 4.3.7 z Hibernate JPA 2.1 API, Hikari 2.1.0
Ok, zobaczę, czy mogę uzyskać przydatne logi. Jaka jest Twoja opinia na temat hikari, która zwraca mi zamknięte połączenie? Ponieważ korzystam z Oracle 11g przy użyciu najnowszego sterownika JDBC, funkcja isValid() powinna działać. Widzę ten wielki piękny wyjątek SQLException, gdy Hibernate próbuje wykonać zapytanie w zamkniętym połączeniu. Tak więc definitywnie otrzymuję zamknięte połączenie z puli. –
Byłem całkiem pewny, że sterownik Oracle poprawnie zaimplementował interfejs API isAlive() JDBC4, ale możesz spróbować zamiast tego skonfigurować parametr connectionTestQuery. HikariCP użyje tego zamiast tego, jeśli jest skonfigurowany. Uwaga: Upewnij się również, że Spring i/lub Hibernate nie buforuje połączeń w sesji (w jakiś sposób) - być może ustawienie. – brettw
Mam więcej informacji. Wygląda na to, że podczas uruchamiania aplikacji mamy wyciek połączenia. Jeszcze przed pierwszym żądaniem wynikającym z interakcji użytkownika. Musimy to zbadać. Poinformuję cię dalej, gdy będę miał więcej informacji. Dzięki hikari rejestrowanie statystyk źródeł danych. :-) –