Когато използвате пул за връзки, трябва ли да затворите връзката в края? Ако е така, не се ли губи целта на обединяването? И ако не, как DataSource знае кога определен екземпляр на Connection е освободен и може да бъде използван повторно? Малко съм объркан по този въпрос, всички насоки се оценяват.
Да, със сигурност трябва да затворите и обединената връзка. Това всъщност е обвивка около действителната връзка. Под капаците ще освободи действителната връзка обратно към басейна. По-нататък от пула зависи да реши дали действителната връзка ще всъщност да бъде затворен или използван повторно за нов getConnection()
обадете се. Така че, независимо дали използвате пул за връзки или не, трябва винаги затворете всички JDBC ресурси в обратен ред в finally
блок на try
блокирайте там, където сте ги придобили. В Java 7 това може да бъде допълнително опростено, като се използва try-with-resources
изявление.
Дали следният метод е нещо близко до стандартното? Изглежда като опит за получаване на връзка от пула и ако DataSource не може да бъде установен, използвайте старомоден DriverManager. Дори не сме сигурни коя част се изпълнява по време на изпълнение. Повтаряйки въпроса по-горе, трябва ли да затворите връзката, която излиза от такъв метод?
Примерът е доста плашещ. Просто трябва да потърсите/инициализирате DataSource
само веднъж по време на стартиране на приложението в някакъв конструктор / инициализация на DB конфигурационен клас за цялото приложение. След това просто извикайте getConnection()
на един и същ източник на данни през останалата част от живота на приложението. Няма нужда от синхронизация или проверки за нула.
Вижте също:
- Безопасно ли е да се използва статичен java.sql.Connection екземпляр в многонишкова система?
- Използвам ли JDBC пул за връзки?