问题 与PostgreSQL JDBC的连接池


最近我从PostgreSQL下载了JDBC驱动程序 这里。 因为我使用的是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实现接口的连接池实现,请不要使用此方法!


4084
2017-10-06 00:06


起源



答案:


使用 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/ 检查一下,它好多了 - 只需下载库文件,将它们放在一个分类中并导入到项目中,上面链接中的文档包含如何在代码中使用它的示例。

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


15
2017-10-06 14:27