При использовании пула соединений следует закрыть соединение в конце? Если да, то не цель объединения потерянных? А если нет, то как DataSource знает, когда конкретный экземпляр Connection освобождается и может быть повторно использован? Я немного запутался в этом, любые указатели оценили.
blockquote>Да, конечно, вам также нужно закрыть объединенное соединение. Фактически это оболочка вокруг фактического соединения. Он под крышкой отпускает фактическое соединение обратно в бассейн. Далее в пул можно решить, будет ли фактическое соединение фактически закрыто или повторно использоваться для нового вызова
getConnection()
. Таким образом, независимо от того, используете ли вы пул соединений или нет, вы всегда должны закрыть все ресурсы JDBC в обратном порядке в блокеfinally
блокаtry
, где вы их приобрели. В Java 7 это может быть дополнительно упрощено с помощью инструкцииtry-with-resources
.Является ли следующий метод чем-то близким к стандарту? Попытка получить соединение из пула, и если DataSource не может быть установлен, используйте старомодный DriverManager. Мы даже не уверены, какая часть будет выполняться во время выполнения. Повторяя вопрос выше, следует ли закрыть соединение, исходящее из такого метода?
blockquote>Пример довольно пугающий. Вам просто нужно искать / инициализировать
DataSource
только один раз во время запуска приложения в каком-либо конструкторе / инициализации класса конфигурации DB базы приложений. Затем просто вызовитеgetConnection()
на один и тот же источник данных на протяжении всей жизни приложения. Нет необходимости в синхронизации или nullchecks.См. Также: