数据库连接池

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

相关推荐
不会就选b1 小时前
C++补充部分(一)--lambda 表达式
开发语言·c++
Pniubi4 小时前
HashMap的扩容和树化边界
java·开发语言
Mikko74 小时前
用 Java 复刻了高中时在塞班上玩的「熔岩矿车」:纯 Swing、零依赖、没有一张图片,一个 jar 双击就能玩
java·游戏开发·swing
知了学历孙老师4 小时前
小自考的校考和统考,出题方和难度差在哪
java·大数据·前端
Java爱好狂.4 小时前
Java初学者如何一周速通SpringBoot!
java·spring boot·后端·spring·高并发·架构师·java面试
秋饼5 小时前
LLM API密钥动态轮换实战:Spring Vault + Spring AI + 多Provider路由
java·ai·技术分享·后端开发
gCode Teacher 格码致知5 小时前
Pandas教学-17:Series与Dataframe的关系
开发语言·python·pandas
发量惊人的中年网工5 小时前
分公司访问总部ERP慢怎么办?SD-WAN组网的排查与验收要点
服务器·开发语言·php
下页、再停留6 小时前
【C#桌面客户端系列学习-15】生成可视化图表之折线图、柱状图、饼状图
开发语言·c#
ShineWinsu6 小时前
对于JavaScript:操作元素的解析
开发语言·前端·javascript·面试·web·dom·元素