Answers:
数据库连接池是一种用于保持数据库连接打开以便其他人可以重用的方法。
通常,打开数据库连接是一项昂贵的操作,尤其是在数据库是远程的情况下。您必须打开网络会话,进行身份验证,检查授权等。池化使连接保持活动状态,以便在以后请求连接时,优先使用活动的连接之一,而不必创建另一个连接。
接下来的几段内容请参考下图:
+---------+
| |
| Clients |
+---------+ |
| |-+ (1) +------+ (3) +----------+
| Clients | ===#===> | Open | =======> | RealOpen |
| | | +------+ +----------+
+---------+ | ^
| | (2)
| /------\
| | Pool |
| \------/
(4) | ^
| | (5)
| +-------+ (6) +-----------+
#===> | Close | ======> | RealClose |
+-------+ +-----------+
在最简单的形式中,它只是与开放式API调用类似的API调用(1),类似于“真实”调用。这首先检查池中是否有合适的连接(2),如果有可用的连接,则将其提供给客户端。否则,将创建一个新的(3)。
“合适的连接”仅仅是一个已经拥有访问使用正确的信息(如数据库实例,凭证,以及其他可能的事情)数据库。
类似地,有一个关闭API调用(4),它实际上并未调用真正的关闭连接,而是将连接放入池(5)中供以后使用。在某个时候,池中的连接可能实际上已关闭(6)。
这是一个非常简单的解释。实际的实现可能能够处理与多个服务器和多个用户帐户的连接,它们可能会预先分配一些连接基线,以便立即进行准备,并且在使用模式趋于平静时,它们实际上可能会关闭旧连接。
图片说出一千个字(paxdiablo给出了很棒的描述):
您可以透明地使用apache commons库进行连接池实现:http : //commons.apache.org/dbcp/
DBCP也是受支持的Hibernate池:http : //www.informit.com/articles/article.aspx? p=353736&seqNum =4
连接池概念不仅在Java中,而且在许多编程语言中均如此。创建新的连接对象的成本很高,因此在生命周期中建立并维护固定数量的连接会创建虚拟池Java Just(http://javajust.com/javaques.html)参见此页面上的问题14