数据库连接池

在Java的多线程中,有线程池负责线程管理,类似线程池,在数据库中也有数据库连接池,负责数据库连接的管理。数据库连接池是一个容器。负责分配、管理数据库连接(Connection)。它允许应用程序重复使用一个现有的数据库连接,而不是在每次连接的时候重新创建一个新的连接;它还可以避免因为没有释放连接而引起的数据库连接遗漏问题。

连接复用

不使用连接池

想要执行SQL语句的时候必须先和数据库产生连接,那么就必须要创建一个连接对象Connection,当连接创建好了之后就可以执行SQL语句了,但是当SQL语句执行完毕之后,就会直接关闭该连接,如果下次还需要连接数据库,则又会创建一个新的连接。这样反复,每次连接都需要创建一个新的连接,并且用完即弃,十分浪费资源。

使用连接池

假如说使用了连接池,就可以重复使用连接了:连接池就像一个连接的容器,在初始化时就会创建一定数量的连接对象,假如需要和数据库产生连接了,就不会创建一个新的连接,而是从连接池中获取一个连接池创建好的连接用来使用,在使用完成之后,不会将连接关闭,而是将连接又重新放回连接池,便于下次使用。这样就不会每次连接都重复创建新的连接,从而达到连接复用的效果,节省资源。(还可以提升系统响应速度,创建新的连接是需要耗时的)。

避免连接遗漏

正常情况下,获取连接之后执行完了SQL语句就要将对应的连接重新归还给连接池,但是有可能会出现这样的异常情况:某个客户端在连接池中获取了一个连接对象,但是其一直处于空闲状态,没有执行SQL,这样该客户端就会一直持有连接,不会释放连接,就会导致数据库连接遗漏问题。连接池通过设置最大空闲时间来释放空闲时间超过最大空闲时间的连接,来避免产生数据库连接遗漏问题。

数据库连接池标准接口:DataSource

DataSource是sun公司官方提供的数据库连接池接口,但是是第三方组织实现的该接口。主要功能是获取连接(Connection getConnection() throws SQLException这个方法),想要啊获取一个连接就直接调用这个方法即可。市面上已经有了很多连接池,从早期的C3P0、DBCP,到后来的HiKari(Spring框架默认的连接池)和Druid(阿里巴巴开源项目),这些都是性能十分强悍的连接池。 SpringBoot默认的HiKari连接池:

查看其源码发现HiKari连接池就是实现了sun公司提供的DataSource接口:

其主要的获取连接的方法:

除了强悍的HiKari连接池之外,Druid连接池也用的比较多。Druid连接池是阿里巴巴开源的数据库连接池项目,功能强大、性能优秀,也是一个优秀的Java语言的数据库连接池。

修改项目使用的连接池

Druid连接池和HiKari连接池同样功能强大、性能极高,但因为其有详细的监控信息,能够实时监控和历史记录并且拥有强大的扩展能力,有时在项目中需要将默认的HiKari连接池更换为Druid连接池。

1.首先需要将Druid连接池的maven坐标导入到pom.xml中:

2.然后再修改application.properties的设置:

将datasource的type换成Druid即可

检查是否更换连接池成功:

发现现在已经将连接池换成了Druid。

Druid连接池也同样是实现了DataSource的官方接口:

相关推荐
努力的lpp1 小时前
php反序列化一(大白话版)
开发语言·web安全·php·ctf·反序列化
2分钟速写快排1 小时前
什么是 RAG?如何用 RAG 实现一个用户记忆?
前端·后端·ai编程
菜鸟~noob2331 小时前
【电子战】第03篇:CFAR(恒虚警)处理【含matlab代码】
开发语言·matlab
面向Google编程1 小时前
Apache Iceberg Variant 类型:v3 半结构化数据不再「二选一」
大数据·后端
三8441 小时前
redis防御加固与安全基线
数据库·redis·安全·应急响应·防御
lhldsg2 小时前
全民健身解决方案小程序开发:从0到1的技术实战
java·数据库·需求分析
jason成都2 小时前
Spring WebFlux 适配达梦新方案|dm‑r2dbc:Netty 异步传输的实验性 R2DBC 驱动
java·后端·spring
泡海椒2 小时前
内置SPI函数库详解:JQuick-Java Builtin工具类实战用法
java·开发语言·python
hqyjzsb2 小时前
零 AI 项目经验,学 Python 转型 AI 的正确顺序是什么?
开发语言·人工智能·python·算法·职场和发展·数据挖掘·数据分析