Ответ 1
Существует несколько возможностей:
-
контейнер сервера приложений/сервлета может предоставить вам пул соединений, см., например, Tomcat 7 JNDI Datasource для PostgresQL.
-
Вы можете создать пул соединений вручную, используя библиотеки с открытым исходным кодом, такие как DBCP или C3P0.
-
Наконец, ваш драйвер JDBC базы данных может предоставить некоторую встроенную реализацию пула подключений, см. Пулы соединений и источников данных PostgresQL и PGConnectionPoolDataSource (я не знаю, как последние и современные эти классы).
Независимо от того, какой вариант вы выбираете, в принципе он всегда работает одинаково: клиент поддерживает пул сетевых подключений к базе данных. Каждый раз, когда вы запрашиваете новое соединение с помощью DataSource
, пул соединений будет заглядывать в бесплатное соединение и давать вам. Когда вы считаете, что закрываете соединение, он будет фактически выпущен и помещен обратно в пул. В другой ветке теперь может использоваться то же, уже установленное соединение.
Объединение имеет много преимуществ:
-
нет накладных расходов на соединение TCP/IP, авторизацию и т.д. - это делается только один раз.
-
пул позаботится о сломанных соединениях, он также может проверить соединение, прежде чем передать его вам
-
наконец, количество активных соединений с базой данных более стабильно, пул соединений должен отказаться от возвращаемого соединения, если вы уже слишком много открыли