Czy podczas korzystania z puli połączeń należy zamknąć połączenie na końcu? Jeśli tak, to czy cel łączenia nie jest stracony? A jeśli nie, w jaki sposób DataSource wie, kiedy konkretna instancja Connection jest zwolniona i może zostać ponownie wykorzystana? Jestem trochę zdezorientowany w tym przypadku, wszystkie wskazówki są mile widziane.
Tak, z pewnością musisz również zamknąć połączenie w puli. W rzeczywistości jest to opakowanie wokół rzeczywistego połączenia. Pod osłonami uwolni rzeczywiste połączenie z powrotem do basenu. Dalsza część grupy zależy od decyzji, czy rzeczywiste połączenie faktycznie być zamkniętym lub ponownie użytym dla nowego getConnection() połączenie. Tak więc, niezależnie od tego, czy korzystasz z puli połączeń, czy nie, powinieneś zawsze zamknij wszystkie zasoby JDBC w odwrotnej kolejności w finally blok try bloku, w którym je zdobyłeś. W Javie 7 można to jeszcze bardziej uprościć, używając try-with-resources
oświadczenie.
Czy poniższa metoda jest zbliżona do standardu? Wygląda na próbę uzyskania połączenia z puli, a jeśli nie można nawiązać DataSource, użyj przestarzałego DriverManager. Nie jesteśmy nawet pewni, która część jest wykonywana w czasie wykonywania. Powtarzając powyższe pytanie, czy należy zamknąć połączenie wychodzące z takiej metody?
Przykład jest dość przerażający. Wystarczy wyszukać/zainicjować DataSource tylko raz podczas uruchamiania aplikacji w jakimś konstruktorze / inicjalizacji całej aplikacji klasy konfiguracyjnej DB. Następnie po prostu wywołaj getConnection() w jednym i tym samym źródle danych przez resztę życia aplikacji. Nie ma potrzeby synchronizacji ani sprawdzania wartości null.
Zobacz też:
- Czy używanie statycznej instancji java.sql.Connection w systemie wielowątkowym jest bezpieczne?
- Czy używam puli połączeń JDBC?