数据库连接池

常用连接池

c3p0、hikari 的性能还是非常不错的,dbcp 相对是弱一些的。

C3P0

开发背景:开源社区项目,相对较早的Java连接池实现之一。 特点: 自动故障恢复:支持自动检测并重新连接断开的数据库连接,以及检测并关闭失效的连接。 配置灵活性:提供丰富的配置选项,允许用户精细控制连接池的行为。 扩展性:支持JNDI绑定和DataSource配置,便于集成到各种应用服务器环境中。 性能与稳定性: 性能:相较于后来出现的一些高性能连接池(如HikariCP),C3P0在并发性能上可能略逊一筹。 稳定性:经过长期实践和社区支持,C3P0在大多数场景下表现稳定,但有时可能遇到配置复杂度较高导致的问题。

DBCP

开发背景:由Apache软件基金会维护,作为Apache Commons项目的一部分。 特点: 轻量级:设计简洁,易于理解和使用,适合小型项目或对资源要求不高的场景。 基础功能完备:提供基本的连接池管理和监控功能,支持JNDI绑定。 可扩展:可通过扩展接口实现自定义连接管理策略。 性能与稳定性: 性能:在高并发场景下的性能表现一般,可能不如C3P0或其他更现代的连接池。 稳定性:基本稳定,但由于更新频率较低,对新数据库特性或Java版本的支持可能滞后。

Tomcat JDBC Pool

开发背景:由Apache Tomcat项目开发,作为Tomcat服务器内置的连接池组件。 特点: 高性能:设计时考虑了高并发场景,通过异步获取连接、优化连接回收策略等方式提高性能。 与Tomcat深度集成:与Tomcat服务器紧密配合,充分利用Tomcat的基础设施(如日志系统),适用于Tomcat部署的应用。 兼容性:几乎兼容DBCP的所有配置属性,迁移成本较低。 性能与稳定性: 性能:相较于C3P0和DBCP,Tomcat JDBC Pool在性能上有较大提升,特别是在高并发环境中。 稳定性:作为成熟服务器项目的组成部分,稳定性有保障,但可能需要关注与特定Tomcat版本的兼容性。

HikariCP

开发背景:由Brett Wooldridge开发的高性能连接池,强调速度、稳定性与可靠性。 特点: 极致性能:设计时充分考虑了性能优化,常被誉为“Java最快的连接池”,特别适合对响应时间有严格要求的系统。 简单易用:API设计简洁,配置选项精炼,易于理解和配置。 零损耗延迟:采用预编译SQL语句、优化字节码等手段,力求消除不必要的延迟。 性能与稳定性: 性能:在多次基准测试中表现出色,被认为是目前性能最佳的Java连接池之一。 稳定性:因其设计原则和持续的社区维护,HikariCP在实际使用中表现出高度的稳定性和可靠性。

Druid

开发背景:由阿里巴巴开发的数据库连接池组件,集成了监控统计功能。 特点: 全面监控:内建丰富的监控统计功能,如SQL执行耗时、并发连接数、SQL慢查询等,方便运维人员进行性能调优。 强大过滤与拦截:支持SQL防火墙、SQL解析与Rewrite等功能,增强系统的安全性与可维护性。 高度可配置:提供大量配置项,适应多种应用场景,支持通过Web Console动态调整配置。 性能与稳定性: 性能:在常规场景下性能优秀,虽然可能略逊于HikariCP,但综合功能更丰富。 稳定性:经过大规模生产环境验证,稳定性良好,尤其适合企业级应用。

总结来说,C3P0和DBCP是较早的连接池实现,功能齐全但性能一般;Tomcat JDBC Pool在高并发场景下有优势,与Tomcat服务器集成紧密;HikariCP以其极致性能和简洁设计受到青睐,特别适合对性能有严苛要求的系统;Druid则提供了丰富的监控与管理功能,更适合大型企业级应用。选择哪一种连接池应根据项目需求、性能预期、运维复杂度等因素综合考量。

数据库连接池的作用:
  1. 资源复用:连接池维护一组预先创建好的数据库连接,当应用程序需要时,可以从池中获取已存在的连接,而不是每次都新建连接。这样避免了创建和关闭连接的昂贵开销。

  2. 性能提升:通过复用连接,减少了数据库连接的创建和释放过程,极大地缩短了应用程序访问数据库的响应时间,提高了系统整体性能。

  3. 并发控制:连接池可以限制同时处于活动状态的连接数量,防止过多的并发连接对数据库造成过大压力,有助于保护数据库资源。

  4. 资源管理:连接池能够自动管理和释放闲置连接,比如定时回收长时间未使用的连接,或者在连接数量超过预设阈值时拒绝新的连接请求,从而避免了因忘记释放连接导致的资源泄漏。

  5. 故障恢复:某些连接池实现提供了故障恢复机制,当数据库连接出现异常时,可以尝试重新建立连接或从池中获取其他可用连接,增强了应用程序的健壮性。

主要参数
  1. 初始化连接数

  2. 最大连接数

  3. 最大空闲连接数 没连接也要保留的最大连接数

  4. 最小空闲连接数 空闲连接数小于这个,会进行补充

  1. 最大等待时间

  2. 等待队列数量

  3. 无效连接清除

  4. 检测数据库连接是否有效的SQL查询

  5. 连接有效性检查

原理

1.初始化连接池

初始化连接数为3, 最大连接数 为5

2.获取连接:
  1. 若池中有空闲连接,直接将其分配给请求者,并标记为正在使用。

  2. 若池中没有可用连接且当前连接总数未达到最大限制,连接池按照配置创建一个新的连接并分配给请求者。开放 4,5号窗口

  3. 若池中既没有空闲连接又已达最大限制,请求者进入等待队列,等待时间超过最大时间,拒绝连接

3.使用连接:

应用程序获得连接后,即可执行SQL查询、更新等操作。在此过程中,连接池并不干涉具体的数据库交互,只是作为连接的提供者。

4.归还连接:
5,连接管理与维护
6.关闭连接池

image-20240423223425070

  • 18
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值