różnych powodów połączeń w puli mogą stać się nieprawidłowy: limit czasu połączenia z serwerem, zagadnień sieciowych ...Tomcat JDBC Basen: testOnBorrow vs testWhileIdle
moim rozumieniu jest to, że gra Bilard Tomcat JDBC nie daje żadnej gwarancji na temat ważność połączeń, które zapewnia aplikacji.
Aby zapobiec (właściwie zmniejszyć ryzyko) uzyskanie nieprawidłowego połączenia z puli, rozwiązaniem wydaje się konfiguracja sprawdzania poprawności połączeń. Sprawdzanie poprawności połączenia oznacza uruchamianie bardzo podstawowego zapytania w bazie danych (na przykład SELECT 1;
w MySQL).
Pula połączeń JDBC Tomcata oferuje kilka opcji testowania połączenia. Dwa, które uważam za bardziej interesujące to testOnBorrow
i testWhileIdle
.
Najpierw pomyślałem, że najlepsza jest opcja testOnBorrow
, ponieważ zasadniczo sprawdza połączenie przed dostarczeniem go do aplikacji (z maksymalną częstotliwością zdefiniowaną przez validationInterval
).
Ale po chwili zdałem sobie sprawę, że testowanie połączenia tuż przed jego użyciem może wpłynąć na szybkość reakcji aplikacji. Więc uważam, że używanie testWhileIdle
może być bardziej wydajne, ponieważ testuje połączenia, gdy nie są używane.
Bez względu na to, którą opcję wybiorę, wydaje się, że zmniejsza ona tylko ryzyko uzyskania nieprawidłowego połączenia, ale ryzyko to nadal istnieje.
W efekcie pytam: czy powinienem użyć testOnBorrow
lub testWhileIdle
, czy też kombinacji obu?
Na marginesie, jestem zaskoczony, że validationInterval
nie ma zastosowania do testOnReturn
i naprawdę nie mam celu testOnConnect
.
Rzeczywiście zapytanie o weryfikację nie jest obowiązkowe. Metoda isValid jest używana w połączeniu, jeśli zapytanie dotyczące sprawdzania poprawności nie zostało dostarczone. Myślę, że dobrym pomysłem jest pozostawienie sprawdzania poprawności połączenia dla sterownika JDBC. –
Och, wydaje się, że masz rację. Po prostu przeczytaj dokumentację. Dokona edycji wpisu. – UltimaWeapon