数据库连接池

数据库连接的问题

  1. 程序与数据库建立的连接是有限的,不能无限创建
  2. 频繁 建立连接 和 断开连接,也会降低数据库的效率,最后导致无响应

数据库连接池

为了避免上述问题,提出了数据库连接池

类比

数据库连接池 相当于下图中的 教室和课桌,事先就已经准备好了,当有学生上课时,直接坐就可以了。如果现去购买,太慢了。

概念

  1. 初始化数量:摆放课桌时的数量,一般初始化数量应大于学生数量。例如:30

  2. 使用:有学生时,直接坐就可以了,不需要现搬运课桌,提高效率

  3. 回收:放学后,学生走了,但课桌不会搬走,而是用于下一批学生

  4. 最大数量:当学生数量大于课桌数量时,也可以再添加几个课桌,但不会无限添加。例如:40

  5. 最小数量:当较长一段时间,上课学生数量较少,如:只有10个学生上课,那么 30 张课桌就浪费了,会搬走10张课桌,但会保留20张课桌。这 20 就是最小数量

数据库连接池原理

初始化

在系统初始化的时候,连接池就先与数据库建立若干个连接

  • 空闲位置:表示还可以再创建一个连接。相当于一张餐桌可以坐5人,但只坐4个人

申请连接

当用户点击登录等操作时,系统需要访问数据库,系统向连接池申请连接,连接池取出一个空闲的连接

注意: 系统不是建立一个新的数据库连接

关闭连接

使用完毕后,程序调用close()方法 关闭连接,但是,并 不是真正 的关闭连接,而是将连接放回连接池中,供下一个请求访问使用。

注意: 不是关闭连接

并发

如果同一时刻,只有一个用户连接数据库,那么连接池只需要建立1个连接就可以了,那么连接池是没有意义的

连接池的应用场景是:同一时刻,有多个用户连接数据库

连接全部被占用

当连接池中的连接全部被占用时,又有用户执行登录等操作,系统向连接池申请连接,连接池发现 没有空闲的连接,但是 还有空闲位置,那么就创建一个新的连接,供系统使用

注意: 如果没有空闲位置,那么就不再创建新的连接

总结

有了连接池后,连接的建立、断开都由连接池来管理。

知名连接池

  • druid,阿里开发
  • hikariCP,springboot2默认连接池
  • c3p0
  • DBCP

设置连接池参数

通过设置连接池的参数,控制连接池中的初始连接数、连接的上下限数以及、最大空闲时间等等。

初始化连接数

初始化连接池时,创建的连接数。

例如:设置10,表示初始化连接池时,就创建10个连接

最小连接数

是连接池一直保持的数据库连接

注意: 如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费.

例如:设置3,在一段时间内,只有2个人在同时连接数据库,那么连接池会断开7个连接,只保留3个

最大连接数

是连接池能申请的最大连接数,如果数据库连接超过后,后面的数据库连接请求将处于等待中

例如:设置15,当10个连接都被使用,再有请求时,就会现创建数据库连接,不会无限创建连接,总共的连接数量不会超过15个


原文出处:/show_1EF3Vw23aI0P.html