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

发布于 2022-09-01 16:33:48 字数 198 浏览 15 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

浅沫记忆 2022-09-08 16:33:48

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

反目相谮 2022-09-08 16:33:48

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

反目相谮 2022-09-08 16:33:48

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

献世佛 2022-09-08 16:33:48

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文