数据库连接池

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

相关推荐
jie188945758663 分钟前
C++ 中的 const 知识点详解,c++和c语言区别
java·c语言·c++
Livingbody6 分钟前
Transformers Pipeline 加载whisper模型实现语音识别ASR
后端
网安INF8 分钟前
RSA加密算法:非对称密码学的基石
java·开发语言·密码学
christine-rr8 分钟前
征文投稿:如何写一份实用的技术文档?——以软件配置为例
运维·前端·网络·数据库·软件构建
明月*清风8 分钟前
c++ —— 内存管理
开发语言·c++
蔡蓝13 分钟前
设计模式-观察着模式
java·开发语言·设计模式
异常君26 分钟前
@Bean 在@Configuration 中和普通类中的本质区别
java·spring·面试
jackson凌27 分钟前
【Java学习笔记】Math方法
java·笔记·学习
WindSearcher28 分钟前
大模型微调相关知识
后端·算法
海尔辛32 分钟前
SQL 基础入门
数据库·sql