2013-10-06 302 views
11

最近,我从here下载了PostgreSQL的JDBC驱动程序。 由于我使用Java 1.7 JVM,它的写:使用PostgreSQL JDBC连接池

如果您使用的是1.6或1.7 JVM,那么你应该使用JDBC4 版本。

我下载了JDBC4。问题是它里面不存在PoolingDataSource's。 如果你得到JDBC3,你可以使用org.postgresql.jdbc3.Jdbc3PoolingDataSource或 其他人看到here

JDBC4中有没有我不知道的合并DataSource,或者我应该使用什么 ?我在JDBC4发现的唯一的事情就是PGPoolingDataSource,但我不 确定,因为根据他们的Java doc的消息,如果我应该这样做:

不要使用这个,如果你的服务器/中间件供应商提供一个与PostgreSQL ConnectionPoolDataSource实现接口的连接池实现!

回答

15

使用org.postgresql.ds.PGPoolingDataSource
下面是一个例子:http://jdbc.postgresql.org/documentation/head/ds-ds.html
我检查使用JDBC4驱动程序这个例子,它能正常工作。

然而,在从这个链接文件,他们从使用PostgreSQL汇集数据源劝阻因为它的局限性:

这里提供的统筹数据源的实现是不是功能丰富的世界之最。除此之外,在游泳池本身关闭之前,连接永远不会关闭;没有办法缩小游泳池。另外,对于默认配置用户以外的用户请求的连接不会被合并。它的错误处理有时无法从池中删除断开的连接。一般不建议使用PostgreSQL提供的连接池。检查您的应用程序服务器或查看杰出的jakarta commons DBCP项目。

他们建议使用DBCP连接池:http://commons.apache.org/proper/commons-dbcp/ 检查它,它是要好得多 - 只需下载库文件,将它们放置在一个classpatch和进口的项目,从上面的链接文档包含例子如何使用它在代码中。

大多数(所有?)应用程序服务器都实现它们自己的连接池,如果您使用的是应用程序服务器,那么这是最好的选择。
例如Tomcat 7有自己的连接池实现,它甚至比DBCP更好,查看文档:http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html