首页 文章 精选 留言 我的

Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池

前言

什么是数据库连接池?

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。

数据库连接池对比

Druid:

Druid是Java语言中最好的数据库连接池,Druid能够提供强大的监控和扩展功能,是一个可用于大数据实时查询和分析的高容错、高性能的开源分布式系统,尤其是当发生代码部署、机器故障以及其他产品系统遇到宕机等情况时,Druid仍能够保持100%正常运行。主要特色:为分析监控设计;快速的交互式查询;高可用;可扩展;Druid是一个开源项目,源码托管在github上。

HikariCP:

HikariCP通过优化(concurrentBag,fastStatementList )集合来提高并发的读写效率。并且使用threadlocal缓存连接及大量使用CAS的机制,最大限度的避免lock。单可能带来cpu使用率的上升。HikariCP从字节码的维度优化代码。 (default inline threshold for a JVM running the server Hotspot compiler is 35 bytecodes )让方法尽量在35个字节码一下,来提升jvm的处理效率。
未来到底是Druid还是HikariCP的天下?
其实这个是根据自己的需求来选择的。Druid监控做的好,当然也快。而HikariCP的特定就是快。所以我的经验是需要监控的时候选择Druid,否则选HikariCP。

之前整合MyBatis的时候由于SpringBoot的默认连接池就是使用HikariCP,所以本文主要讲解如何替换hikari为druid

编码

1.添加druid依赖

由于SpringBoot默认采用hikari连接池,因此添加druid依赖后我们会去除hikari依赖
编辑pom.xml文件

xml 复制代码
<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>2.1.1</version>
</dependency>

修改为

xml 复制代码
<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>2.1.1</version>
	<exclusions>
		<exclusion>
			<groupId>com.zaxxer</groupId>
			<artifactId>HikariCP</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.21</version>
</dependency>

2.修改SpringBoot的配置文件application.properties

sh 复制代码
# 数据库配置
# spring.datasource.name : 数据源名称
# spring.datasource.driverClassName : 数据库驱动
# spring.datasource.url : 数据库连接地址
# spring.datasource.username : 数据库用户名
# spring.datasource.password : 数据库密码
# spring.datasource.type : 数据库类型
# spring.datasource.hikari.pool-name : 数据库连接池名称
# spring.datasource.hikari.minimum-idle : 最小连接数
# spring.datasource.hikari.maximum-pool-size : 最大连接数
# spring.datasource.hikari.auto-commit : 是否自动提交
# spring.datasource.hikari.idle-timeout : 连接闲置超时时间
# spring.datasource.hikari.max-lifetime : 连接在连接池中的存活时间
# spring.datasource.hikari.connection-timeout : 连接数据库超时时间
# spring.datasource.hikari.connection-test-query : 连接测试语句
spring.datasource.name=mysqlDataSource
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springBoot2?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.pool-name=hikariPool
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.max-lifetime=1800000
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.connection-test-query=SELECT 1

替换为

sh 复制代码
# 数据库配置
# spring.datasource.name : 数据源名称
# spring.datasource.driverClassName : 数据库驱动
# spring.datasource.url : 数据库连接地址
# spring.datasource.username : 数据库用户名
# spring.datasource.password : 数据库密码
# spring.datasource.type : 数据库类型
# spring.datasource.druid.initial-size : 初始化时建立物理连接的个数.初始化发生在显示调用init方法,或者第一次getConnection时
# spring.datasource.druid.min-idle : 最小连接池数量
# spring.datasource.druid.max-active : 最大连接池数量
# spring.datasource.druid.max-wait : 获取连接时最大等待时间,单位毫秒.配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁
# spring.datasource.druid.time-between-eviction-runs-millis : 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
# spring.datasource.druid.min-evictable-idle-time-millis : 配置一个连接在池中最小生存的时间,单位是毫秒
# spring.datasource.druid.validation-query : 用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'.如果validationQuery为null,testOnBorrow,testOnReturn,testWhileIdle都不会起作用
# spring.datasource.druid.test-on-borrow : 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
# spring.datasource.druid.test-on-return : 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
# spring.datasource.druid.test-while-idle : 建议配置为true,不影响性能,并且保证安全性.申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效
# spring.datasource.druid.pool-prepared-statements : 是否缓存preparedStatement,也就是PSCache.PSCache对支持游标的数据库性能提升巨大,比如说oracle.在mysql下建议关闭
# spring.datasource.druid.max-pool-prepared-statement-per-connection-size : 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true.在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
spring.datasource.name=mysqlDataSource
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springBoot2?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.initial-size=2
spring.datasource.druid.min-idle=2
spring.datasource.druid.max-active=20
spring.datasource.druid.max-wait=60000
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.min-evictable-idle-time-millis=300000
spring.datasource.druid.validation-query=SELECT 'x'
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.pool-prepared-statements=false
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20

3.测试结果

运行项目,并且访问[http://127.0.0.1:8080/mybatis]。结果如下图所示

说明:本文仅仅替换了一个数据库连接池,对正常的持久化数据并无影响。所以之前编写的MyBatis代码还是能运行成功。当然druid连接池最擅长的监控本文还未讲解。但是放心,后续会有文章讲解druid的数据库监控。

优秀的个人博客,低调大师

微信关注我们

本文章为原创内容,如需转载请注明来源!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Oracle

Oracle

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Apache Tomcat

Apache Tomcat

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Eclipse

Eclipse

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。