如何使用Java创建PostgreSQL连接池?
我正在尝试使用连接池,但我不理解正确。谁来实施它?软件、驱动程序还是数据库?
如何使用连接池运行我的程序?我正在使用本机PostgreSQL驱动程序。
我需要一个代码示例。我正在做一个网络爬虫,它与数据库有很多连接。
我正在尝试使用连接池,但我不理解正确。谁来实施它?软件、驱动程序还是数据库?
如何使用连接池运行我的程序?我正在使用本机PostgreSQL驱动程序。
我需要一个代码示例。我正在做一个网络爬虫,它与数据库有很多连接。
有几种可能性:
应用程序服务器/servlet 容器可以为您提供连接池,例如,请参阅 PostgresQL 的 Tomcat 7 JNDI 数据源。
您可以使用开源库(如 DBCP 或 C3P0)手动创建连接池。
最后,您的数据库 JDBC 驱动程序可能会提供一些内置的连接池实现,请参阅 PostgresQL 连接池和数据源和 PGConnectionPoolDataSource(我不知道这些类的更新程度)。
无论您选择哪个选项,原则上它始终以相同的方式工作:客户端维护与数据库的网络连接池。每次您使用 请求新连接时,连接池都会偷看免费连接并给您。当您认为要关闭连接时,它实际上将被释放并放回池中。其他线程现在可能使用相同的已建立的连接。DataSource
池化有许多优点:
没有TCP / IP连接,授权等的开销 - 它只完成一次。
pool将负责损坏的连接,它也可以在将其提供给您之前测试连接
最后,活动数据库连接数更稳定,如果已经打开太多,连接池应该拒绝返回连接
池化本身由位于应用程序代码和数据库驱动程序之间的代码完成。
谁把代码放在那里?可以是任何人。可能是你 - 有像DBCP这样的库,你的代码可以用来将池放在数据库之上。它可以是一个J2EE容器,比如Tomcat或JBoss。它甚至可能是数据库 - 正如Tomasz指出的那样,PostgreSQL带有池化代码。
听起来你没有使用J2EE容器,在这种情况下,这取决于你或数据库。就个人而言,我更喜欢专用的池化实现,如DBCP,而不是数据库提供的实现。数据库的程序员最关心数据库;池的程序员最关心池。
因此,获得DBCP(恕我直言,它比替代方案更好),然后使用它。