Пул соединений с PostgreSQL JDBC

Недавно я скачал драйвер JDBC для PostgreSQL из здесь. Поскольку я использую Java 1.7 JVM, и он написал:

Если вы используете 1,6 или 1,7 JVM, вам следует использовать версию JDBC4.

Я загружаю JDBC4. Проблема в том, что в этом нет PoolingDataSource's. Если вы получаете JDBC3, вы можете использовать org.postgresql.jdbc3.Jdbc3PoolingDataSource или другие, как показано здесь.

Есть ли пул DataSource в JDBC4, о котором я не знаю, или что я должен использовать вместо этого? Единственное, что я нашел в JDBC4, это PGPoolingDataSource но я не уверен, что я должен использовать это, потому что на основе их сообщения Java doc:

Не используйте это, если поставщик сервера/промежуточного программного обеспечения предоставляет реализацию объединения пулов, которая взаимодействует с реализацией PostgreSQL ConnectionPoolDataSource!

Ответы

Ответ 1

Использовать org.postgresql.ds.PGPoolingDataSource
Вот пример: http://jdbc.postgresql.org/documentation/head/ds-ds.html
Я проверил этот пример с помощью драйвера JDBC4, и он отлично работал.

Однако в документации по этой ссылке они не рекомендуют использовать источник данных пула postgreSQL из-за ограничений:

Реализация пула данных-источников, представленная здесь, не является самой многофункциональной в мире. Среди прочего, соединения никогда не закрываются, пока сам пул не закрыт; нет возможности сжать бассейн. Кроме того, соединения, запрошенные для пользователей, отличных от настроенного пользователем по умолчанию, не объединены. Его обработка ошибок иногда не может удалить сломанное соединение из пула. В общем случае не рекомендуется использовать пул соединений PostgreSQL˘. Проверьте свой сервер приложений или проверьте отличный проект DBCP jakarta commons.

Они рекомендуют использовать пул соединений DBCP: http://commons.apache.org/proper/commons-dbcp/ проверить это, это намного лучше - просто загрузите файлы библиотеки, поместите их в классную таблицу и импортируйте в проект, документацию из приведенная выше ссылка содержит примеры того, как использовать ее в коде.

Большинство (все?) Серверов приложений реализуют свои собственные пулы соединений, если вы используете сервер приложений, это лучший вариант.
Для примера Tomcat 7 имеет собственную реализацию пула соединений, он даже лучше, чем DBCP, проверьте документацию: http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html