# 数据库连接池

数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需要从缓冲池中取出一个,使用完毕之后再放回去。可以通过设定连接池最大连接数来防止系统无尽地与数据库连接

连接池的核心思想是连接的复用,工作原理主要由三部分组成,分别为连接层的建立,连接池连接的使用管理,连接池的关闭。

  1. 连接池的建立。一般在系统初始化时,连接池会根据系统配置建立,并在池中建立几个连接对象,以便使用时能从连接池中获取。

  2. 连接池的管理。连接池管理策略是连接池机制的核心,连接池内连接的分配和释放对系统的性能有很大的影响。其策略是:

    当客户请求数据库连接时,首先检查连接池中是否有空闲连接;如果存在空闲连接,则将连接分配给客户使用并作相应处理(即标记该连接为正在使用中,引用计数加1);如果没有空闲连接,则查看当前所打开的连接数是否已经达到最大连接数,如果没有达到最大连接数,就重新创建一个新的连接给请求的客户;如果已经达到,那么就设定最大的等待时间让其等待,如果超出了这个等待时间,就抛出异常给用户。

    当客户释放数据库连接时,则要先判断该连接的引用次数是否超过了规定值,如果超过了就要从连接池中删除该连接,并判断当前连接池内总的连接数是否小于最小连接数,如果小于了又要将连接池充满;如果没超过就将这个连接标记为开放状态,可供再次复用;

  3. 连接池的关闭。当程序退出时,关闭连接池中所有的连接,释放连接池相关资源,该过程正好与创建是相反的。

连接池的主要优点

  1. 减少连接的创建时间。连接池中的连接是早已准备好的,可以重复使用的,获取后就可以直接访问数据库进行操作,减少了连接创建的次数和时间;
  2. 更快的系统响应速度。数据库连接池在初始化过程中,往往已经创建了若干的数据库连接置于池中备用。此时连接的初始化工作均已完成。利用现有可用连接,避免了数据库连接初始化和释放过程的时间开销,从而缩减了系统整体响应时间;
  3. 统一的连接管理。如果不使用连接池,每次访问数据库都要创建一个连接,系统的稳定性受连接需求的影响很大,容易产生资源浪费和高负载异常。而连接池可以使性能最大化,将资源利用在一定的水平之下。连接池能够控制池中的连接数量,增强了稳定性。