Что такое пул соединений и почему он по умолчанию не подходит для производства? Может кто-нибудь уточнить это?
Пул соединений - это техника для открытия / подготовки / закрытия соединений. Механизм пула соединений - это часть программного обеспечения (компонента), которой вы делегируете функцию управления соединениями. Ваше приложение будет просто запрашивать соединение, использовать его и доставлять обратно в пул. Компонент отвечает за открытие N соединений и оставляет их готовыми к тому моменту, когда запросит ваше приложение. Если соединение устарело, механизм объединения затем закроет его и снова откроет новое. Это обеспечивает более эффективное использование соединений, поскольку вам не нужно ждать установления соединения во время фактического выполнения вашего кода и вам не нужно беспокоиться об устаревших соединениях.
Hibernate на самом деле не предоставляет никакого реального механизма пула соединений. Он предоставляет менеджер внутренних соединений, который является очень элементарным. Причина проста: почти (если не все) серверы приложений (например, JBoss AS) и контейнеры сервлетов (например, Tomcat) по умолчанию предоставляют механизм пула соединений. Таким образом, ваше приложение не должно беспокоиться о деталях. Он просто запрашивает у AS соединение.
На мой взгляд, есть только два случая, когда вам нужно беспокоиться о пуле соединений:
- Вы имеете дело с автономным приложением (которое не запускается внутри контейнера)
- Вы действительно разбираетесь в пуле соединений, и ни один из существующих не удовлетворяет вашим потребностям.
Но, по моему опыту, большинство людей, использующих "внешний" пул соединений, делают это из-за недостатка знаний о пуле соединений и из-за недостатка знаний об их контейнере.