数据库连接池是什么?
- 数据库连接池利用的是一种池化的思想,其存在的目的是为了减少资源频繁的创建和销毁所带来的开销。
数据库连接池的作用?
- 每一次客户端操作数据库都时候,都会创建一个连接。连接池的作用是提前初始化一部分的连接,保存在连接池里面。这里包括数据库的登录等。
- 当应用程序需要操作数据库的时候,每一次只用从连接池当中取一个连接操作即可,避免了每一次连接的建立和释放带来的性能开销。
连接池的参数?
- 最大连接数:连接池中可以容纳的最大的连接数量;
- 当前连接数:表示此刻连接池中正在被使用的连接数;
- 当前空闲连接数:表示当前连接池的空置连接数。
工作流程
初始化
初始化连接池–包括连接数据库的账号密码、数据库名、最大连接数等–创建最大连接数个数据库连接–将这些连接压入数据库连接队列
- 每一次创建成功,压入队列后需要将空闲连接数+1
提供获取、释放、销毁的方法
- 提供获取连接的方法:队列不为空—等待信号量–队列加锁–取队列头–空闲数-1–工作数+1–解锁
- 释放连接的方法:队列加锁–尾插队列–空闲+1–忙碌-1–解锁–发信号消费
- 销毁连接池:加锁–遍历整个队列–通过close方法关闭连接-空闲置为0–当前存活置为0–清空队列–解锁
其它
- 设计数据库连接池的时候最好采用单例模式,保证只有一个数据库连接池的示例存在于应用程序中,这样可以更好地管理和贡献连接资源。
- 当数据库连接池配合线程池使用的时候,需要考虑线程竞争连接情况,如果连接池连接不足,将会引起线程等待或超时,降低响应的速度。同时,数据库连接过程也会发生阻塞的情况,这会使得线程池中的活跃线程数量下降,也会影响性能。