数据库连接池的深入学习

为什么需要数据库连接池?

正常操作数据库需要对其进行连接,访问数据库,执行sql语句,断开连接。

创建数据库连接是一个昂贵的过程,在高并发的情况下,频繁的创建数据库的连接可能会导致数据库宕机。

有了连接池那么启动就创建多个连接对象,并保存起来,当需要的时候取出来执行sql语句,用完放回,那么极大的减少了连接的建立与摧毁的开销。

池化技术从根本上就是将连接的对象保存起来,并不对其进行摧毁,那么在高并发的场景下不需要频繁的对连接进行创建与销毁,减少创建资源的开销。增加响应速度。(线程池也如此)

连接池优点:

1.资源复用:减少连接的建立与销毁的开销。

2.提高性能:在初始化的时候连接就已经建立好,可以立即使用,不需要在执行sql语句时再创建,减少了响应时间。

3.优化资源分配:当我们有有个应用需要操作数据库时,在持久层可以设置最大数量,来避免资源的耗尽。

4.生命周期管理:池化技术负责连接的创建,初始化,销毁与回收。

使用JDBC来操作数据库:

java 复制代码
//1. 连接=数据库
Connection connection = DriverManager.getConnection(jdbcUrl, username, password);
 try {
		Statement stmt = conn.createStatement();
		ResultSet rs = stmt.executeQuery("SELECT * FROM user") ;
		//使用结果集ResultSet获取数据。
		 while(rs.next()){   
	         String name = rs.getString("name") ; 
	         System.out.println(name);
	     } 
		 //操作完成以后关闭JDBC对象,要把所有使用的JDBC对象全都关闭,以释放JDBC资源,同时按照先进后出的原则来释放。
           resultSet.close();
           preparedStatement.close();
           connection.close();
	  } catch (SQLException e) {
		e.printStackTrace();
	  }

而现在普遍使用JDBC连接池,JDBC也提供了一个标准的数据源接口javax.sql.DataSource

目前常见的JDBC连接池开源技术:

  1. HikariCP:以其极低的延迟和卓越的性能著称,实现了"零加锁"并发控制机制,优化了线程与内存的使用,适合高并发场景。HikariCP提供了丰富的配置选项,并且被Spring Boot 2官方推荐使用 。

  2. Apache DBCP (Database Connection Pool):由Apache开发的Java数据库连接池项目,使用了Jakarta commons-pool对象池机制。它提供了基本的连接池功能,虽然性能可能不如HikariCP,但稳定性好,易于配置 。

  3. C3P0:一个开源的JDBC连接池,实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。C3P0历史悠久,但代码复杂,可能存在维护上的挑战 。

  4. Druid:由阿里巴巴开发的数据库连接池,提供了丰富的监控和扩展功能,具有防SQL注入的能力,内置了多种监控和统计功能,方便对JDBC接口进行监控跟踪 。

  5. BoneCP:曾经是最快的连接池之一,但在2013年后不再更新。它被设计为高效、轻量级,并且易于集成到各种持久化产品中 。

  6. Tomcat JDBC Pool:Tomcat从7.0版本开始引入的连接池模块,完全兼容DBCP,通过异步方式获取连接,支持高并发应用环境

相关推荐
Minxinbb1 小时前
MySQL中Performance Schema库的详解(上)
数据库·mysql·dba
mmsx2 小时前
android sqlite 数据库简单封装示例(java)
android·java·数据库
zpjing~.~3 小时前
Mongo 分页判断是否有下一页
数据库
2401_857600953 小时前
技术与教育的融合:构建现代成绩管理系统
数据库·oracle
秋恬意3 小时前
Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别
java·数据库·mybatis
潇湘秦4 小时前
一文了解Oracle数据库如何连接(1)
数据库·oracle
雅冰石4 小时前
oracle怎样使用logmnr恢复误删除的数据
数据库·oracle
web前端神器4 小时前
mongodb给不同的库设置不同的密码进行连接
数据库·mongodb
从以前4 小时前
Berlandesk 注册系统算法实现与解析
数据库·oracle
Muko_0x7d24 小时前
Mongodb
数据库·mongodb