初探数据库连接池
数据库连接池
问:什么是连接池技术?
答:不用思考得太复杂,简单说,就是对数据库连接进行管理的技术。
流行的连接池有 JNDI,dbcp,c3p0,druid。Spring框架使用的第三方依赖工具是dbcp和c3p0.
一、连接池的基本思想:连接复用
在系统启动时先创建一定数量的连接存放在连接池中。(初始化的连接数量由参数initialSize决定)
当用户请求获取连接时,从连接池中取出一个连接返回给用户。而不是创建一个链接给用户
当用户不需要连接时,将连接放回连接池中而不是关闭该连接。
二、使用连接池的好处
如果不使用连接池会出现这样的状况:在获取连接时需要创建一个连接,不使用连接时又需要关闭连接,每次获取都要创建,每次使用完毕都要关闭。这样一来就会产生频繁的创建和关闭连接的操作(频繁的读写),这样不仅速度慢,对数据库的负荷也增大了。
使用连接池能解决上面的问题,初始化时创建一堆连接放到连接池中(内存),获取连接时直接从池中获取,速度更快。连接使用完毕后归还到池中,供下一次使用(标记为空闲,池中空闲数+1)。连接池的好处是,提高了速度,减少对数据库的负荷。
三、连接池常见参数的说明(不同框架使用的参数名称可能不一致,这里以druid为例)
minIdle:连接池中最小空闲数。
当检测到池中空闲数小于minIdle并且池中连接数小于maxActive时,补充空闲连接数量。否则不做任何操作
设置该参数的好处是:在大部分时间都能保证池中有空闲连接可供使用。
initialSize:初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
maxActive:连接池中最大连接数量,可以理解成连接池的容量。(空闲数+非空闲数 = 池中连接数 <= maxActive)
maxIdle:druid已经不再使用此参数,但是其他框架还在使用。此参数代表连接池中最大空闲数。
例如:maxActive=20,maxIdle=10。假设当前有20个连接正在使用,当这20个连接使用完毕后,只会归还10个到池中,
剩余的10个将会被关闭和删除。
maxWait:获取连接时最大等待时间。超过此时间仍没有等到有空闲连接时,抛出无空闲连接异常。
四、获取连接和归还连接的基本流程
以下是基本流程:
参考连接: