数据库连接池的连接的创建、分配和释放是由谁负责的?


听说为了提高数据库访问效率,增加了数据库连接池这么一个功能,用来对数据库的连接进行分配管理和释放,尽量减少连接的创建和关闭,因为耗费资源。这里应该是有一个合理分配的算法的,好像不同的数据库连接池的算法不一样?不知道我理解的对不对。
那么我想知道数据库的连接是什么时候创建的,是谁负责创建的呢,是一个用户创建一个连接还是一次请求一个连接呢?它又是什么时候被释放或关闭的呢?

数据库连接 hibernate spring 数据库

zxzxzx 9 years, 10 months ago

数据库客户端(使用数据库的程序,比如你的web程序)负责连接池的维护,你用框架的话框架已经帮你把连接池的功能给做好了。

BBBot answered 9 years, 10 months ago

拿hibernate举例,在配置的时候可以选择配置连接池的数量,当应用启动的时候,hibernate会去创建配置好的相应数量的连接,并保存在某个地方,这个地方称之为连接池,当用户请求应用需要访问数据库时,hibernate会从连接池里取出没有分配过的连接给这个请求,请求使用完以后,hibernate会把这个连接释放并放回连接池(这里应该是用某种状态标识,我猜的,没有看源码)

RyoYL answered 9 years, 10 months ago

说说我的理解 在spring中会配置数据源 程序中都使用数据源提供的连接,这个数据源就是个连接池。 程序使用完连接后会放回连接池,每个连接都是可重复利用的。 对于不同的连接池实现有不同的配置参数,可以配置闲置多久则关闭连接等等。

黑猫是我老婆 answered 9 years, 10 months ago

连接池在初始化的时候建立 initCount 个连接放入池中,上层程序在获取数据库连接时,先从池中获取,如果池中有,则直接返回;如果没有则判断当前被使用的连接数有没有超过 maxCount ,如果没有则新建一个物理连接,否则需要等待池中有空闲连接或者被使用数小于 maxCount 时建立一个物理连接。
当连接使用完毕后,要放入到池中。系统要定时检测连接池中的连接的可用性,否则出现数据库服务器主动断开连接造成连接失效的问题,如果检测到连接失效,要将其移除池。
上面大体上讲了一下连接池的逻辑,实际在编码中不同库内部实现肯定跟上面讲的不一样,但是思路上大体就是包括,放入连接池,从连接池中获取,还有连接保活。

狩沢绘理华 answered 9 years, 10 months ago

Your Answer