一、Druid简介
Druid是阿里巴巴的一个开源数据库连接池,基于Apache 2.0协议,可以免费自由使用。但它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser。Druid能够提供强大的监控和扩展功能。但Druid只支持JDK 6以上版本,不支持JDK 1.4和JDK 5.0。
二、Druid支持的数据库
Druid支持所有JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等等。
Druid针对Oracle和MySql做了特别优化,比如Oracle的PS Cache内存占用优化,MySql的ping检测优化。
三、Druid基本配置
Druid的基本配置相信大家基本都会了,可参考我上一篇文章:Druid连接池配置详解及连接池调优_阿里 druid 连接池-CSDN博客
今天我们重点讲一下Druid内置的监控系统是如何配置和使用的。
四、Druid内置监控系统配置
########## 配置数据源 (Druid)##########
spring:
datasource:
username: root
password: 123456
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
# 下面为连接池的补充设置,应用到上面所有数据源中
# 初始化大小,最小,最大
druid:
initial-size: 5
max-active: 20
min-idle: 5
time-between-eviction-runs-millis: 60000
max-wait: 60000
min-evictable-idle-time-millis: 300000
validation-query: SELECT 1
test-while-idle: true
testOnBorrow: false
test-on-return: false
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
#配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
#如果允许时报错 java.lang.ClassNotFoundException:org.apache.log4j.Priority
#则导入 log4j 依赖即可
filters: stat,wall,slf4j
filter:
stat:
log-slow-sql: true #慢sql
slow-sql-millis: 2000 # 设置2秒
db-type: mysql
slf4j:
enabled: true
statement-log-error-enabled: true
statement-create-after-log-enabled: false
statement-close-after-log-enabled: false
result-set-open-after-log-enabled: false
result-set-close-after-log-enabled: false
use-global-data-source-stat: true
connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
#SQL监控页面配置
stat-view-servlet:
enabled: true
login-username: admin
login-password: 123456
allow:
deny:
reset-enable: false
url-pattern: /druid/*
#web拦截
web-stat-filter:
url-pattern: /*
exclusions: "*.js,*.gif,*.jpg,*.css,/druid/*"
enabled: true
session-stat-enable: true # 开启session统计功能
session-stat-max-count: 1000 # session的最大个数,默认100
aop-patterns: com.xin.*.mapper.* #Spring监控开启
配置好以后,重启服务,浏览器访问:http://项目地址:项目端口/项目名称/druid/login.html就会看到如下页面:
输入之前配置中配置好的用户名和密码,即可登录成功。
五、Druid内置监控系统简单介绍
5.1、首页
展示Druid版本、jdk版本、重置次数、启动时间等基本信息。
5.2、数据源
数据源菜单显示数据库连接池的基本信息,如连接地址、连接类型、最大连接数、最小连接数、初始连接等信息。
可通过逻辑连接打开次数、逻辑连接关闭次数来判断系统中是否存在有连接未关闭的情况(正常情况下打开次数和关闭次数应该一致)
5.3、SQL监控(主要)
SQL监控显示系统已执行过的每条SQL语句的执行情况。通过执行数、执行时间、最慢时间、事务中、错误数、最大并发、执行时间分布等统计维度来展现。
需要说明的有:
执行数:本条sql语句已执行的次数
执行时间:本条sql语句累计执行时间(单位:毫秒)
最慢:本条sql语句执行最慢一次的耗时(单位:毫秒)
执行时间分布【- - - - - - - -】:这8个 – 分别代表8个耗时区间的次数,从左至右依次是:
0-1毫秒次数、1-10毫秒次数、10-100毫秒次数、100-1000毫秒次数、1-10秒次数、10-100秒次数、100-1000秒次数、大于1000秒次数。
如下图中的这一条数据:
可以发现:执行时间上本条sql语句有1次是在10-100毫秒内就执行完成,其他耗时区间的执行次数都为0.
执行+RS时分布与此同理。通过耗时区间,可以发现SQL执行的效率情况,可以反映出数据库或应用是否稳定。
5.4、SQL防火墙
SQL防火墙分防御统计、表访问统计、函数调用统计、SQL防御统计-白名单、SQL防御统计-黑名单这几项。
其中若是涉嫌SQL注入的SQL语句将被拦截,出现在SQL防御统计-黑名单中。
5.5、WEB应用
Web应用主要统计本应用的并发、请求、事务提交、事务回滚等信息,另外统计了本应用在各操作系统上、各浏览器上的访问次数。
5.6、URI监控
URI监控统计了应用中各url的访问次数、请求时间、并发数等信息。
5.7、Session监控
Session监控显示应用中session的请求时间、请求次数、最大并发等数据。
5.8、Spring监控
Spring监控显示针对配置中需要监控的各方法的执行数、执行时间、最大并发、读取行数等信息。