Oto przebieg wydarzeń ilustrujący, co się dzieje:
- Połączenie jest wymagane i używane przez dzwoniącego (aplikacja lub pula połączeń)
- Rozmówca przechowuje odniesienie do niego, dzięki czemu połączenie może być ponownie użyte
- Rozmówca przechodzi przez okres nieaktywności (na przykład system deweloperski w nocy lub system kontroli jakości w weekend).
- Gdy połączenie z bazą danych nie jest używane, baza danych traktuje połączenie jako bezczynne. Ponieważ jest bezczynny, po pewnym czasie (domyślnie MySQL to 8 godzin) baza danych zamyka połączenie.
- Rozmówca nadal ma dojście do połączenia, a kiedy rozmówca ponownie próbuje użyć połączenia, nieprzyjemnie odkrywa, że połączenie zostało zamknięte.
Powodem, dla którego autoReconnect=true działa i że pula testująca poprawność połączenia działa, jest to, że instruujesz system wywołujący, aby przetestował połączenie pod kątem tej sytuacji i spróbował ponownie, jeśli taka sytuacja się wydarzy.
Jeśli chodzi o to, czy zapytanie weryfikacyjne wpłynie na wydajność:teoretycznie jest to użycie połączenia do zrobienia czegoś. W praktyce coś jest tak trywialne, że jego efekt jest znikomy w kontekście całego systemu.
[EDYTUJ]
W tym przypadku Apache DBCP jest pulą połączeń zawieszającą się na połączeniu, ale NIE chcesz, aby DBCP zamykał połączenie po każdym wywołaniu. Celem puli połączeń jest utrzymanie połączenia w gotowości do następnego wywołania, ponieważ tworzenie połączeń jest kosztowne. Obiekty połączeń obsługiwane przez pulę są obsługiwane przez rzeczywiste połączenia z bazą danych, a baza danych to ta, która zamyka to rzeczywiste połączenie po upływie limitu czasu bezczynności. Należy zauważyć, że limit czasu zamknięcia bezczynnych połączeń jest skonfigurowany w bazie danych, a nie w puli połączeń. Z tego powodu DBCP nie ma możliwości sprawdzenia, czy połączenie zostało zamknięte, czy nie, chyba że rzeczywiście próbuje się z nim połączyć. Dlatego potrzebujesz zapytania weryfikacyjnego.
Więcej informacji na temat konfigurowania DBCP można znaleźć na stronie konfiguracji oraz dokumentację API .