什么是连接池?我们为什么需要它?
连接池允许多个客户端使用缓存起来的连接对象,这些对象可以连接数据库,它们是共享的、可被重复使用的。J2SDK 1.4及以上的版本才提供连接池技术。
打开/关闭数据库连接开销很大,连接池技术允许我们在连接池里维护连接对象,这样可以提高数据库的执行命令的性能。多个客户端请求可以重复使用相同的连接对象,当每次收到一个客户端请求时,就会搜索连接池,看看有没有闲置的连接对象。如果没有闲置对象的话,要么所有的客户端请求都进入队列排队,要么在池中创建一个新的连接对象(这取决于池里已经有多少个连接存在以及配置支持多少连接)。一旦某个请求使用完连接对象之后,这个对象会被重新放入池中,然后会被重新分派给排队等待的请求(分派给哪个请求要看使用什么调度算法)。因为大部分请求都是使用现存的连接对象,所以连接池技术大大减少了等待创建数据库连接的时间,从而减少了平均连接时间。
如何使用连接池?
连接池在基于网络的企业级应用中很常见,应用服务器负责创建连接对象、添加它们到连接池中、分派连接对象给请求、回收使用完毕的连接对象、重新将它们放回连接池去。当网络应用的动态网页显式的创建数据库连接(使用JDBC 2.0 连接池管理者接口(JDBC 2.0 pooling manager interface),调用PooledConnection对象的getConnection()方法,这叫作逻辑连接(logical connection)),应用服务器会从池中取出连接对象,而当它使用完毕之后关闭时,应用服务器又负责将使用完的连接对象放回池中。记住,你也可以使用JDBC 1.0 / JDBC 2.0 API来获取物理连接(physical connnection),但这种情况非常少见,仅仅是因为数据库只需要连接一次,不需要连接池的情况。
连接池可以处理多少连接?谁创建/释放连接?
现在什么都可以进行配置——最大的连接数、最小连接数、最大空闲连接数等等。所有这些参数都可以由服务器管理员配置。服务器启动时,固定数量的连接对象(配置的最小连接数)被创建,并添加到连接池中。当客户端请求消耗完所有的连接对象时,再有新的请求都会创建新的连接对象,它们被添加到连接池再分派给这个新的请求,直到设置的达到最大的连接数。服务器也会一直查看闲置的连接对象数,当检测到闲置的连接数超过设置值时,服务器会关闭闲置连接,然后它们将被垃圾回收。
传统的连接池 vs 可管理的连接池
连接池是个开放的概念,并不仅限于企业级应用中的连接池。任何应用都可以使用这个概念,并用自己想要的方式管理它。连接池概念指的是创建、管理、维护连接对象。传统的应用也可以做到,但我们发现当应用的规模增大时,如果没有一个健壮的连接池机制的话,管理连接是变得越来越困难。
![94f03024953eaab4ca1e4a52f9aa2463.png](https://i-blog.csdnimg.cn/blog_migrate/9e818abc902850c03f15c3fbb5851346.jpeg)