数据库连接池的深入学习

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

正常操作数据库需要对其进行连接,访问数据库,执行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,通过异步方式获取连接,支持高并发应用环境

相关推荐
BENA ceic5 分钟前
Spring 的三种注入方式?
java·数据库·spring
2401_895521346 分钟前
MySQL中的count函数
数据库·mysql
雪碧聊技术7 分钟前
IO流-07:缓冲流
数据库
.小小陈.16 分钟前
MySQL 入门到实战:从基础概念到核心存储引擎
数据库·mysql
辰同学ovo17 分钟前
从全局登录状态管理学习 Redux
前端·javascript·学习·react.js
ting945200017 分钟前
告别无效学习:Scholé 如何用 AI 重构职场学习,让学习直接嵌入工作流
人工智能·学习·重构
xian_wwq17 分钟前
【学习笔记】Harness到底是什么
笔记·学习·ai·harness
IT邦德24 分钟前
Oracle 26ai 首发季度补丁 23.26.2.0.0 来了!单机版升级
数据库·oracle
wuxinyan12324 分钟前
大模型学习之路004:RAG 零基础入门教程(第一篇):基础理论与文档处理流水线
人工智能·学习·rag
yoyo_zzm26 分钟前
Laravel10.x新特性全解析
数据库·mysql·架构