数据库连接池的深入学习

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

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

相关推荐
d111111111d20 分钟前
STM32外设学习-串口数据包笔记-(数据包的了解)
笔记·stm32·单片机·嵌入式硬件·学习
韩立学长24 分钟前
基于Springboot的汽车推荐系统设计与实现7f7h74np(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·汽车
一 乐29 分钟前
海产品销售系统|海鲜商城购物|基于SprinBoot+vue的海鲜商城系统(源码+数据库+文档)
java·前端·javascript·数据库·vue.js·后端
有趣的野鸭3 小时前
JAVA课程十一次实验课程主要知识点示例
java·前端·数据库
开开心心_Every3 小时前
专业视频修复软件,简单操作效果好
学习·elasticsearch·pdf·excel·音视频·memcache·1024程序员节
兰若姐姐4 小时前
cisp-pte之SQL注入题之vulnerabilities/fu1.php?id=1
数据库·sql
im_AMBER6 小时前
Vite + React 项目启动深度踩坑指南
前端·学习·react.js·前端框架
wdfk_prog6 小时前
[Linux]学习笔记系列 -- [kernel]kthread
linux·笔记·学习
数据皮皮侠7 小时前
区县政府税务数据分析能力建设DID(2007-2025)
大数据·数据库·人工智能·信息可视化·微信开放平台
请叫我阿杰8 小时前
Ubuntu系统安装.NET SDK 7.0
数据库·ubuntu·.net