数据库连接池

在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的官方接口:

相关推荐
ambition202422 小时前
操作系统同步:读者-写者问题与读写公平法详解(附每个 PV 操作含义)
linux·开发语言·数据结构·unix
zmzmzmalo2 小时前
Linux ELF文件加载与内存管理揭秘
linux·网络·数据库
chuan.bai4 小时前
Java RAG 实战(第 11 篇):RAG 知识工作台网页
java·开发语言·人工智能
离陌在学C#7 小时前
C# 事件(Event)详解:从概念到实战
开发语言·c#
0x537 小时前
网站通信(一)
java
To_OC7 小时前
Next.js + Redis 构建笔记系统:Redis Hash 实战与性能优化
redis·后端·next.js
Terra.K7 小时前
Java异常学习[特殊字符]
java·开发语言·学习
葡萄城技术团队9 小时前
InfluxDB 2\.x 深度解析:核心架构、Flux 函数与制造业落地指南(三)
java·开发语言·架构
Super 含9 小时前
Android 启动优化(五):线程、GC 与 IO 为什么会拖慢启动?
java·服务器·数据库
counting money9 小时前
Java IO流详解:从InputStream到文件操作实战
java·开发语言·python