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?