数据库连接的问题
- 程序与数据库建立的连接是有限的,不能无限创建
- 频繁 建立连接 和 断开连接,也会降低数据库的效率,最后导致无响应
数据库连接池
为了避免上述问题,提出了数据库连接池
类比
数据库连接池 相当于下图中的 教室和课桌,事先就已经准备好了,当有学生上课时,直接坐就可以了。如果现去购买,太慢了。
概念
初始化数量:摆放课桌时的数量,一般初始化数量应大于学生数量。例如:30
使用:有学生时,直接坐就可以了,不需要现搬运课桌,提高效率
回收:放学后,学生走了,但课桌不会搬走,而是用于下一批学生
最大数量:当学生数量大于课桌数量时,也可以再添加几个课桌,但不会无限添加。例如:40
最小数量:当较长一段时间,上课学生数量较少,如:只有10个学生上课,那么 30 张课桌就浪费了,会搬走10张课桌,但会保留20张课桌。这 20 就是最小数量
数据库连接池原理
初始化
在系统初始化的时候,连接池就先与数据库建立若干个连接
- 空闲位置:表示还可以再创建一个连接。相当于一张餐桌可以坐5人,但只坐4个人
申请连接
当用户点击登录等操作时,系统需要访问数据库,系统向连接池申请连接,连接池取出一个空闲的连接
注意: 系统不是建立一个新的数据库连接
关闭连接
使用完毕后,程序调用close()方法 关闭连接,但是,并 不是真正 的关闭连接,而是将连接放回连接池中,供下一个请求访问使用。
注意: 不是关闭连接
并发
如果同一时刻,只有一个用户连接数据库,那么连接池只需要建立1个连接就可以了,那么连接池是没有意义的
连接池的应用场景是:同一时刻,有多个用户连接数据库
连接全部被占用
当连接池中的连接全部被占用时,又有用户执行登录等操作,系统向连接池申请连接,连接池发现 没有空闲的连接,但是 还有空闲位置,那么就创建一个新的连接,供系统使用
注意: 如果没有空闲位置,那么就不再创建新的连接
总结
有了连接池后,连接的建立、断开都由连接池来管理。
知名连接池
- druid,阿里开发
- hikariCP,springboot2默认连接池
- c3p0
- DBCP
设置连接池参数
通过设置连接池的参数,控制连接池中的初始连接数、连接的上下限数以及、最大空闲时间等等。
初始化连接数
初始化连接池时,创建的连接数。
例如:设置10,表示初始化连接池时,就创建10个连接
最小连接数
是连接池一直保持的数据库连接
注意: 如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费.
例如:设置3,在一段时间内,只有2个人在同时连接数据库,那么连接池会断开7个连接,只保留3个
最大连接数
是连接池能申请的最大连接数,如果数据库连接超过后,后面的数据库连接请求将处于等待中
例如:设置15,当10个连接都被使用,再有请求时,就会现创建数据库连接,不会无限创建连接,总共的连接数量不会超过15个







