参考

https://blog.csdn.net/qq_35703848/article/details/99647416

1 概念

数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。
通俗的讲:之前进行数据库操作的时候,都是需要先创建mysql的链接,然后执行其余操作。执行完一条SQL就关闭连接。而mysql连接池就是在程序启动的时候创建足够多的数据库连接,有SQL需要执行的时候,直接使用连接池中已经创建好的连接,SQL执行完之后,也不销毁连接,由连接池进行回收,待下一个SQL连接使用。
image.png

2 选用Mysql连接池的场景

对于简单的数据库查询,由于对于数据库的访问不是很频繁,这时可以在访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什么明显的性能上的开销。但是对于一个经常访问的数据库应用,情况就完全不同了。频繁的建立、关闭连接,会极大的减低系统的性能,因为对于连接的使用成了系统性能的瓶颈。
连接复用。通过建立一个数据库连接池以及一套连接使用管理策略,使得一个数据库连接可以得到高效、安全的复用,避免了数据库连接频繁建立、关闭的开销。

3 数据库连接池的基本原理

是在内部对象池中维护一定数量的数据库连接,并对外暴露数据库连接获取和返回方法。(外部使用者可通过getConnection 方法获取连接,使用完毕后再通过releaseConnection方法将连接返回,注意此时连接并没有关闭,而是由连接池管理器回收,并为下一次使用做好准备。)

4 选用Mysql连接池的好处

  • 资源重用

    1. 由于数据库连接得到重用,避免了频繁创建、释放连接引起的大量性能开销。在减少系统消耗的基础上,另一方面也增进了系统运行环境的平稳性(减少内存碎片以及数据库临时进程/线程的数量)。
  • 更快的系统响应速度

     数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于池中备用。此时连接的初始化工作均已完成。对于业务请求处理而言,直接利用现有可用连接,避免了数据库连接初始化和释放过程的时间开销,从而缩减了系统整体响应时间。
    
  • 统一的连接管理,避免数据库连接泄漏

    在较为完备的数据库连接池实现中,可根据预先的连接占用超时设定,强制收回被占用连接。从而避免了常规数据库连接操作中可能出现的资源泄漏。一个最小化的数据库连接池实现:
    

5 连接池的实现原理

image.png