1. Druid是什么?

Druid是阿里开源的连接池,是Java语言中最好的数据库连接池.Druid能够提供强大的监控和扩展功能,是为监控而生的数据库连接池!源代码仓库地址是 https://github.com/alibaba/druid

2. 什么是数据库连接池?

连接池的思想就是建立一个”缓存池”,预先存放一定数量的连接,当需要建立数据库连接时,就从”缓存池”中取出一个,用完之后再放入池中。

连接池是怎么管理、分配连接对象呢?

使用一个”空闲池”管理已经被创建但未被使用的连接,当有一个新的连接请求时,首先再”空闲池”中寻找空闲的连接对象,如果池中有空闲连接对象,就把空闲时间最长的那个连接对象取出来分配(前提是这个对象是有效的),如果这个对象不可用,就将其从”空闲池”中删除,重新检测。如果没有检测到可用连接,则判断当前连接数是否达到最大连接数,如果没有,则创建新的连接,如果达到最大连接数,则进入等待。如果在等待的时间内,检测到可用的连接,则进行分配,如果超时还未检测到可用连接,则返回null。系统只对所创建的连接进行计数统计,对于检测可用连接,可开辟线程(提示响应速度,增加系统开销)、也可在分配前进行检测。

3. 使用

3.1 添加依赖

修改pom.xml

<!--数据库连接池-druid 开始部分 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<!--数据库连接池-druid 结束部分 -->

3.2 修改配置

修改application.yml

server:
port: 8080
spring:
datasource:
# 指定数据源类型为: 阿里的Druid连接池
type: com.alibaba.druid.pool.DruidDataSource
# 数据库连接相关配置
url: jdbc:mysql://127.0.0.1:3306/micro_serve?characterEncoding=UTF-8&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai
# 数据库: 用户名
username: root
# 数据库: 密码
password: liuqh112233
# 数据库驱动
driver-class-name: com.mysql.cj.jdbc.Driver
# druid数据源相关的配置
druid:
# 初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
initial-size: 10
# 最小连接池数量
min-idle: 10
# 最大连接池数量
max-active: 200
# 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置
max-wait: 60000
# 关闭空闲连接的检测时间间隔,单位毫秒。Destroy线程会检测连接的间隔时间,如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接。
time-between-eviction-runs-millis: 60000
# 连接的最小生存时间.连接保持空闲而不被驱逐的最小时间
min-evictable-idle-time-millis: 300000
# 验证数据库服务可用性的sql,用来检测连接是否有效的sql
validation-query: select 1
# 建议配置为true,不影响性能,并且保证安全性。 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis, 执行validationQuery检测连接是否有效。
test-while-idle: true
# 申请连接时直接检测连接是否有效。申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
test-on-borrow: false
# 归还连接时检测连接是否有效。归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
test-on-return: false
# 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
pool-prepared-statements: false
# 连接出错后再尝试连接三次
connection-error-retry-attempts: 3
# 数据库服务宕机自动重连机制
break-after-acquire-failure: true
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall,slf4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
connection-properties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
# 配置DruidStatFilter
web-stat-filter:
enabled: true
url-pattern: "/*"
# 过滤不统计的url
exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
# 配置监控服务器
stat-view-servlet:
# 一定要配置true,不配置则是使用默认值false,空白页面
enabled: true
# 访问路径 http://ip:8080/druid
url-pattern: "/druid/*"
# IP白名单(没有配置或者为空,则允许所有访问)
allow: 127.0.0.1,172.30.5.96
# IP黑名单 (存在共同时,deny优先于allow)
deny:
# 禁用HTML页面上的“Reset All”功能
reset-enable: false
# 登录名
login-username: admin
# 登录密码
login-password: 123456
# mybatis相关的配置
mybatis:
# 实体类
type-aliases-package: com.hui.javalearn.model
# mapper xml文件地址;注意:classpath* 指的是扫描所有模块的资源路径
mapper-locations: classpath*:mapper/*.xml

3.3 访问监控页面

访问: http://127.0.0.1:8080/druid

1. 登录页

image-20200915161220585

2. Sql监控

image-20200916125045283

3. URI监控

image-20200916125127725