一、简要介绍
Druid数据源连接池来源于阿里巴巴,是淘宝和支付宝专用数据库连接池。事实上,它不仅仅是一个数据库连接池,还包含一个ProxyDriver、一系列内置的JDBC组件库、一个 SQL Parser。支持所有JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等等。Druid针对Oracle和MySql做了特别优化,比如Oracle的PSCache内存占用优化,MySql的ping检测优化。Druid提供了诸如MySql、Oracle、Postgresql、SQL-92等SQL语句的完美支持,是一个手写的高性能SQL Parser,支持Visitor模式,使得分析SQL的抽象语法树很方便。它执行简单SQL语句耗时在10微秒以内,对于复杂的SQL语句耗时也在30微秒左右。另外,通过Druid提供的SQL Parser可以在JDBC层面上拦截SQL并进行相应处理,比如说分库分表、SQL安全审计等。Druid也能防御SQL注入攻击,WallFilter就是通过Druid的SQL Parser分析语义实现的。
二、实例demo测试
1、首先添加Druid依赖,访问 [mvnrepository.com/artifact/com.alibaba/druid(http://mvnrepository.com/artifact/com.alibaba/druid)
选择需要的版本,复制maven内容到pom.xml
2、添加Druid配置到application.yml中,核心代码如下,可直接复制使用:
···
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8
driver-class-name: com.mysql.jdbc.Driver
username: root
password: root
配置监控统计拦截的filters,去掉后监控界面sql将无法统计,“wall”用于防火墙
filters: stat,wall,log4j
最大活跃数
maxActive: 20
初始化数量
initialSize: 1
最大连接等待超时时间
maxWait: 60000
打开PSCache,并且制定每个连接PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
通过connectionProperties属性打开mergeSql功能;慢sql记录
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
minldle: 1
timeBetweenEvictionRunsMillis: 60000
minEvictableldleTimeMillis: 300000
validationQuery: select 1 from dual
testWhileldle: true
testOnBorrow: false
testOnReturn: false
type: com.alibaba.druid.pool.DruidDataSource
···
3、开启Druis监控功能,新建类DruidConfiguration.java
···
package com.wj.demo1;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class DruidConfiguration {
@Bean
public ServletRegistrationBean statViewServlet(){
//创建servlet注册实体
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/");
//设置ip白名单
servletRegistrationBean.addInitParameter("allow","127.0.0.1");
//设置控制台管理用户
servletRegistrationBean.addInitParameter("loginUsername","druid");
servletRegistrationBean.addInitParameter("loginPassword","123456");
//是否可以重置数据
servletRegistrationBean.addInitParameter("resetEnable","false");
return servletRegistrationBean;
}
@Bean
public FilterRegistrationBean statFileter(){
//创建过滤器
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean((new WebStatFilter()));
//设置过滤器过滤路径
filterRegistrationBean.addUrlPatterns("/");
//忽略过滤的形式
filterRegistrationBean.addInitParameter("exclusions",".js.gif,.jpg,.png,.css,.ico,/druid/*");
return filterRegistrationBean;
}
}
···
4、运行项目, 项目运行成功后,我们要访问Druid的监控界面,访问地址:127.0.0.1:8080/d ruid/login.html 到达登录页面,
输入DruidConfiguration.java中配置的用户名和密码,即可登录到我们的服务器监控页面
我们已经成功的访问到了监控首页,可以看到大致包含了如下几个模块:数据源、SQL监控、SQL防火墙、Web应用、URI监控、Session监控、JSONAPI等。
数据源
可以看到项目中管理的所有数据源配置的详细情况,除了密码没有显示外其他都在。
SQL监控
可以查看所有的执行sql语句
SQL防火墙
druid提供了黑白名单的访问,可以清楚的看到sql防护情况。
Web应用
可以看到目前运行的web程序的详细信息。
URI监控
可以监控到所有的请求路径的请求次数、请求时间等其他参数。
Session监控
可以看到当前的session状况,创建时间、最后活跃时间、请求次数、请求时间等详细参数。
JSONAPI
通过api的形式访问Druid的监控接口,api接口返回Json形式数据。
网友评论