DBCP、Druid、HikariCP

DBCP、Druid、HikariCP

1. DBCP

​ apache上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。

​ commons-pool对象池机制的数据库连接池。

​ 对象池:

  • 对象池:就是我们要介绍的commons-pool的核心概念,类似于容器,用于存放我们需要池化的对象。

  • 对象池工厂:就是操作对象池的工程(类似于设计模式中的工程模式),这个工厂可以执行借出、归还、销毁等管理池对象的操作。

  • 池对象:就是我们需要池化的对象。

  • 池对象工厂:就是操作池对象的工厂,比如生成、验证、激活、钝化、销毁池对象。

public interface ObjectPool {
	//从对象池中借出对象
	public abstract Object borrowObject() throws Exception,NoSuchElementException, IllegalStateException;
	//将对象归还到对象池中
	public abstract void returnObject(Object obj) throws Exception;
	//使一个对象无效
	public abstract void invalidateObject(Object obj) throws Exception;
	//向对象池中添加对象
	public abstract void addObject() throws Exception, IllegalStateException,UnsupportedOperationException;
	//得到当前对象池中空闲的对象
	public abstract int getNumIdle() throws UnsupportedOperationException;
	//得到当前对象池已经借出的对象,这里的激活其实就是对象池借出对象的概念
	public abstract int getNumActive() throws UnsupportedOperationException;
	//清空对象池,并销毁对象池中的所有对象
	public abstract void clear() throws Exception,UnsupportedOperationException;
	// 关闭对象池
	public abstract void close() throws Exception;
 
	/**
	 * @deprecated Method setFactory is deprecated
	 *这个方法已经弃用了,池对象工程需要在实现类的构造函数中传入
	 */
 
	public abstract void setFactory(PoolableObjectFactory poolableobjectfactory)
			throws IllegalStateException, UnsupportedOperationException;
}

2. Druid

​ 是alibba出品的一个功能比较全面,且扩展性较好的数据库连接池,比较方便对jdbc接口进行监控跟踪等。

  • DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。
  • DruidDataSource 高效可管理的数据库连接池。
  • SQLParser。
1) 可以监控数据库访问性能

Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。

2) 替换DBCP和C3P0。

Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。

3) 数据库密码加密

直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。

4) SQL执行日志

Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。

注: 可能会有连接泄露问题

连接泄露

指的是如果在某次使用或者某段程序中没有正确地关闭Connection、Statement和ResultSet资源,那么每次执行都会留下一些没有关闭的连接,这些连接失去了引用而不能得到重新使用,因此就造成了数据库连接的泄漏。

3. HikariCP

​ 目前最快,目前被SpringBoot2官方推荐使用的数据库连接池。

  • 字节码更加精简,所以可以加载更多代码到缓存。
  • 实现了一个无锁的集合类型,来减少并发造成的资源竞争。
  • 使用了自定义的数组类型,相对与ArrayList极大地提升了性能。
  • 针对CPU的时间片算法进行优化,尽可能在一个时间片里面完成各种操作。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C3P0 和 DBCP 都是连接池技术,可以有效地管理数据库连接,减少连接建立和释放的消耗。Druid 技术比 C3P0 和 DBCP 更加先进,它具有更高的性能和安全性,并且支持对数据库的实时监控和统计分析。 ### 回答2: c3p0,DBCP,和Druid都是Java中常用的数据库连接池技术,它们各自有不同的技术侧重和优势。 c3p0连接池是一个开源的JDBC连接池,侧重于提供高性能和可靠的连接池管理。其优势包括: 1. 可以自动缓存和重用数据库连接,避免频繁创建和销毁连接,提高了数据库访问的性能。 2. 提供连接断线自动恢复功能,能够检测并处理数据库连接的断开和超时问题,保证系统的稳定性。 3. 支持连接池的配置和监控,可以通过配置文件或者代码动态调整连接池的参数,满足不同业务需求。 4. 能够处理不同数据库的连接,支持主流数据库如MySQL、Oracle等。 DBCP连接池是Apache Commons项目中的一个模块,侧重于提供简单易用的连接池实现。其优势包括: 1. 配置简单,可以通过简单的配置文件即可完成连接池的创建和管理。 2. 轻量级,与应用程序集成方便,对代码的侵入性较小。 3. 支持基本的连接池功能,如连接的管理、复用和释放。 4. 良好的可扩展性,可以通过集成其他组件来实现更高级的功能。 Druid连接池是阿里巴巴开源的一款高性能、可扩展和功能丰富的数据库连接池,侧重于提供全方位的数据库连接管理。其优势包括: 1. 提供性能监控和统计功能,可以实时监控数据库连接池的状态和性能指标,方便线上问题的排查和性能优化。 2. 支持连接池的防火墙功能,可以通过配置白名单、黑名单等规则来过滤恶意或异常的数据库连接。 3. 内置了SQL防注入功能,能够自动检测和阻止恶意SQL注入攻击。 4. 提供了数据库连接的可视化接口,方便开发人员查看和管理连接池的状态和连接使用情况。 总的来说,c3p0、DBCPDruid都是成熟、稳定的数据库连接池技术,根据实际需求和性能要求选择合适的连接池可以提升应用的数据库访问性能和稳定性。 ### 回答3: c3p0,DBCPDruid都是常用的数据库连接池技术,它们都有各自的侧重和优势。 c3p0是一种快速而可靠的JDBC连接池,侧重于提供高性能的连接缓存和连接池管理。它可以对JDBC连接进行管理和重用,有效地降低了数据库连接的创建和关闭的消耗。同时,c3p0还支持连接池的配置,可以根据应用的负载情况进行自动调整,保证连接池的稳定性。 DBCP(数据库连接池)也是一种常用的连接池技术,它侧重于提供简单易用的连接池解决方案。DBCP提供了基本的连接池功能,并且可以通过配置文件进行定制。它的优势在于使用简单,不需要过多的配置和调整,适用于一些简单的应用场景。 Druid是阿里巴巴开源的数据库连接池,侧重于提供高性能和可扩展性。它支持了连接池的所有功能,同时还提供了一些监控和统计功能,可以方便地监控和定位问题。Druid还内置了SQL防火墙和统计功能,可以有效地防止SQL注入攻击和性能问题。 总的来说,c3p0,DBCPDruid都是优秀的连接池技术,具有各自的特点和优势。根据应用的需求和场景,可以选择合适的连接池技术来提高数据库访问的性能和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值