SpringBoot2.X整合阿里Druid连接池

SpringBoot2.X整合阿里Druid连接池

1、简介

Tips:本贴默认您已经掌握了SpringBoot的相关知识,如果您看到有错误或者误导性言论请留言指出,我会立即进行更改。

连接池在在实际开发中是必不可少的,常用的连接池有DBCP、C3P0、HikariCP(2.X内置并且默认使用)以及本文的主角阿里druid,关于他们的区别和性能对比可以自行百度或者参考这个帖子(连接池区别及性能测试)。
简而言之就是HikariCP性能最好,druid功能强大。关于连接池的作用及基本使用本文不做赘述,主要讲述druid的使用及其自带的监控功能的说明。

2、整合

2.1 环境说明

环境说明:SpringBoot 2.1.5.RELEASE druid版本 1.1.16 JDK 1.8,Mysql 8.0.16,Mybatis-Plus 3.1.1

2.2 依赖及说明

<dependencies>
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.1.1</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.1.16</version>
    </dependency>
</dependencies>

说明:使用druid原包依赖和启动包依赖并没有什么较大的区别,仅存在一些配置属性差异,启动包底层还是依赖原包的。本文选择启动包的依赖.

2.3 application.properties

server.port=9006
###########数据库连接信息###############
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123456


###########druid连接池信息###############
#最大连接池数量,默认值8
spring.datasource.druid.maxActive=30
spring.datasource.druid.initialSize=3
#最小连接池数量
spring.datasource.druid.minIdle=3
#获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
spring.datasource.druid.maxWait=12000
#有两个含义:
#1) 销毁线程会检测连接的间隔时间,如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接。白话就是间隔多久才进行一次检测,检测需要关闭的空闲连接
#2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明,默认1分钟
spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
#连接保持空闲而不被驱逐的最小时间
spring.datasource.druid.minEvictableIdleTimeMillis=30000
##是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql5.5以下的版本中没有PSCache功能,建议关闭掉。5.5及以上版本有PSCache,建议开启。默认值false
spring.datasource.druid.poolPreparedStatements=true
spring.datasource.druid.maxOpenPreparedStatements=30
#用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。
spring.datasource.druid.validation-query=select 'x'
spring.datasource.druid.testWhileIdle=true
#申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
spring.datasource.druid.testOnBorrow=false
spring.datasource.druid.testOnReturn=false

#要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。单个connnection独享一个statement cache,maxOpenPreparedStatements是针对单个connection链接的
spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20
spring.datasource.druid.filters=stat,wall,slf4j
#通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.druid.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

如果有使用yml文件的朋友可以使用在线格式转换工具自行转换(在线格式转换),配置文件中的相关属性根据自己的项目进行变更即可。

工程很简单,就是一个查询,结构如下:
项目结构
代码不难就不贴出来了,我们主要的重点不是这个,请各位观众老爷握紧方向盘,端好瓜继续往下看。

启动项目,日志信息如下,说明当前使用的连接池已经是druid了。
控制台信息

2.4 使用Druid自带的监控功能

首先说明一下启动包的版本问题
maven中央仓库Druid的版本

1.1.10版本后面直接是1.1.13的维护版本,区别在于1.1.13为了安全起见监控页面默认是关闭的,需要在配置文件中手动配置开启。这就是为什么很多小伙伴发现升级版本之后页面无法访问,切回旧版就可以的原因。

更新说明

在application.properties配置文件下面增加配置,这里直接贴上完整的配置:


server.port=9006

###########数据库连接信息###############

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver

spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=utf-8

spring.datasource.username=root

spring.datasource.password=123456





###########druid连接池信息###############

#最大连接池数量,默认值8

spring.datasource.druid.maxActive=30

spring.datasource.druid.initialSize=3

#最小连接池数量

spring.datasource.druid.minIdle=3

#获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。

spring.datasource.druid.maxWait=12000

#有两个含义:

#1) 销毁线程会检测连接的间隔时间,如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接。白话就是间隔多久才进行一次检测,检测需要关闭的空闲连接

#2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明,默认1分钟

spring.datasource.druid.timeBetweenEvictionRunsMillis=60000

#连接保持空闲而不被驱逐的最小时间

spring.datasource.druid.minEvictableIdleTimeMillis=30000

##是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql5.5以下的版本中没有PSCache功能,建议关闭掉。5.5及以上版本有PSCache,建议开启。默认值false

spring.datasource.druid.poolPreparedStatements=true

spring.datasource.druid.maxOpenPreparedStatements=30

#用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。

spring.datasource.druid.validation-query=select 'x'

spring.datasource.druid.testWhileIdle=true

#申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。

spring.datasource.druid.testOnBorrow=false

spring.datasource.druid.testOnReturn=false



#要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。单个connnection独享一个statement cache,maxOpenPreparedStatements是针对单个connection链接的

spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20

spring.datasource.druid.filters=stat,wall,slf4j

#通过connectProperties属性来打开mergeSql功能;慢SQL记录

spring.datasource.druid.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000





##########WebStatFilter配置#############

#启用URI监控,WebStatFilter默认值false,不进行拦截统计

spring.datasource.druid.web-stat-filter.enabled=true

#需要拦截的路径,这里拦截所有

spring.datasource.druid.web-stat-filter.url-pattern=/*

#忽略的资源

spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*

#SQL监控

spring.datasource.druid.filter.stat.enabled=true

spring.datasource.druid.filter.stat.log-slow-sql=true

#慢sql,默认3000ms

spring.datasource.druid.filter.stat.slow-sql-millis=2000

spring.datasource.druid.filter.stat.merge-sql=true

#启用SQL防火墙过滤

spring.datasource.druid.filter.wall.enabled=true

spring.datasource.druid.filter.wall.db-type=mysql

#是否允许删除数据操作,默认true,false数据删除相关SQL会报错

spring.datasource.druid.filter.wall.config.delete-allow=true

#是否允许删除表操作

spring.datasource.druid.filter.wall.config.drop-table-allow=false

#启用session监控

spring.datasource.druid.web-stat-filter.session-stat-enable=true

spring.datasource.druid.web-stat-filter.session-stat-max-count=

spring.datasource.druid.web-stat-filter.principal-session-name=

spring.datasource.druid.web-stat-filter.principal-cookie-name=

spring.datasource.druid.web-stat-filter.profile-enable=true

#Spring监控配置,Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔,这里配置控制层包名,也可以是服务层

spring.datasource.druid.aop-patterns=com.mybatisPlus.*





#########StatViewServlet配置############

##是否启用StatViewServlet(监控页面)从1.1.10版本后开始默认值为false(考虑到安全问题默认并未启动,如需启用建议设置密码或白名单以保障安全)

spring.datasource.druid.stat-view-servlet.enabled= true

#监控登录用户账号密码设置

spring.datasource.druid.stat-view-servlet.login-username=admin

spring.datasource.druid.stat-view-servlet.login-password=admin

spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*

#监控页面的重置按钮是否开启(按钮还在,功能失效)默认true,开启点击按钮数据清零,重新开始计数

spring.datasource.druid.stat-view-servlet.reset-enable=false

#IP白名单(没有配置或者为空,则允许所有访问)

spring.datasource.druid.stat-view-servlet.allow=

#IP黑名单 (存在共同时,deny优先于allow)

spring.datasource.druid.stat-view-servlet.deny=192.168.10.1

配置文件配置完成后就不需要配置类了,配置项的说明已经很详细了,如还有疑问可以移步官网–druid配置说明
启动项目,访问http://ip:port/druid/login.html,登录的账号密码在配置文件中。
登录
界面
sql监控目前什么内容都没有,我们做几次CRUD的操作就会有相关的sql记录了。 数据信息
挑几个说明一下:
执行数:该sql的执行总次数 。
执行时间:这里的时间是该条sql执行的所有次数时间和 。
最慢:执行记录中花费最多的时间。

时间分布显示[0,0,0,0,0,0,0,0]

第一位代表这个SQL耗时0-1毫秒的执行次数统计

第二位代表这个SQL耗时1-10毫秒的执行次数统计

第三位代表这个SQL耗时10-100毫秒的执行次数统计

以此类推,如果一边倒的分布在右侧,这个sql就需要优化。
该功能可以对项目中所有的sql进行监控,查找慢sql,对项目的性能优化很有帮助。当然还有其他,如URI监控、spring监控等,但是前提是你要在配置文件中开启。截个图表示一下。
URI监控
注意:开启这些会损耗一定的性能,因此建议在开发或者测试环境开启,优化完成后,生产环境建议关闭,如果公司是土豪,请无视,毕竟没有什么性能问题是加一台服务器解决不了的,如果有,那就加两台。

2.5 去除监控页面内置的广告

作为一个开源项目,其实打点广告无可厚非,但是呢看着确实不太美观,我们需要自己动手剔除这个广告(这个应该找前端,哈哈)。
找到maven仓库中的druid-1.1.16.jar,虽然我们使用的是druid-spring-boot-starter,但是这个底层其实是依赖原包的,解压打开druid-1.1.16.jar\support\http\resources\js\common.js,找到下面的内容:在这里插入图片描述
修改如下,删除其余只剩下一个footer标签
在这里插入图片描述
搞定之后重启项目,效果如下:
图
干干净净,以上就是整合的所有内容了,如有疑问,或者错误均可留言指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值