1.什么是数据库连接池
数据库连接池字面意思就是装放数据库连接的池子。数据库连接是比较耗性能的一项操作,如果没有连接池的概念,那么每次对数据库进行增删改查操作,都将需要对数据库进行一次连接,然后执行相应的sql语句,单次操作没什么影响,一旦访问次数达到一定数量,将会极大影响应用程序的性能。举个简单的例子:有100个人需要搭梯子从一楼到达二楼,每次搭梯子时间为1分钟,爬梯子时间为1分钟。假设每个人爬梯子的时候都需要搭梯子,那么100个人爬楼时间就是100*1+100*1=200分钟;但是如果提前先搭10-20个梯子准备好,消耗时间10-20分钟,然后加上每个人爬梯子时间共100分钟,总共只需110-120分钟,显然比较第一种方式大大提高了效率。对应到数据库,梯子就是一个数据库连接,爬梯子过程就是sql执行过程,提前准备好的梯子就相当于一个连接池。
2.数据库连接池的作用
连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等等。也可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。当程序关闭,则数据库连接池才会真正释放。
3.数据库连接池的原理
连接池的工作原理主要由三部分组成,分别为连接池的建立,连接池中连接的使用管理,连接池的关闭。
第一、连接池的建立。一般在系统初始化时,连接池会根据系统配置建立,并在池中建立几个连接对象,以便使用时能从连接池中获取,连接池中的连接不能随意创建和关闭,这样避免了连接随意建立和关闭造成的系统开销。java中提供了很多容器类,可以方便的构建连接池,例如Vector,stack等。
第二、连接池的管理。连接池管理策略是连接池机制的核心,连接池内连接的分配和释放对系统的性能有很大的影响。其策略是:
当客户请求数据库连接时,首先查看连接池中是否有空闲连接,如果存在空闲连接,则将连接分配给客户使用;如果没有控线连接,则查看当前所开的连接数是否已经达到最大连接数,例如如果没有达到就重新创建一个请求的客户;如果达到,就按设定的最大等待时间进行等待,如果超出最大等待时间,则抛出异常给客户。
当客户释放数据库连接时,先判断该连接的引用次数是否超过了规定值,如果超过了就从连接池中删除该连接,否则就保留为其他客户服务。该策略保证了数据库连接的有效复用,避免了频繁建立释放连接所带来的系统资源的开销。
第三、连接池的关闭。当应用程序退出时,关闭连接池中所有的链接,释放连接池相关资源,该过程正好与创建相反。