2021-03-17 更新
配置原理可以参考这个:阿里开源Druid数据库连接池使用
一、Druid是什么?
Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。
二、Druid 具体配置操作
阿里 Druid为SpringBoot 提供专门的start依赖,Mybatis 使用 Druid 相对比较简单,我们只需要引入 Druid 的starter 依赖并添加相关的一些配置即可。不需要再用Java Configuration。
2.1 以前没有druid-starter时的Java Configuration
新建DruidConfiguration.java
@Bean
public ServletRegistrationBean druidServlet() {
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
//设置登录查看信息的账号密码.
servletRegistrationBean.addInitParameter("loginUsername","admin");
servletRegistrationBean.addInitParameter("loginPassword","123456");
return servletRegistrationBean;
}
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new WebStatFilter());
filterRegistrationBean.addUrlPatterns("/*");
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return filterRegistrationBean;
}
Druid Spring监控:在MybatisConfig中加入以下代码:
@Bean
public DruidStatInterceptor druidStatInterceptor() {
DruidStatInterceptor dsInterceptor = new DruidStatInterceptor();
return dsInterceptor;
}
@Bean
@Scope("prototype")
public JdkRegexpMethodPointcut druidStatPointcut() {
JdkRegexpMethodPointcut pointcut = new JdkRegexpMethodPointcut();
pointcut.setPattern("com.wqc.data.dao.*");
return pointcut;
}
@Bean
public DefaultPointcutAdvisor druidStatAdvisor(DruidStatInterceptor druidStatInterceptor, JdkRegexpMethodPointcut druidStatPointcut) {
DefaultPointcutAdvisor defaultPointAdvisor = new DefaultPointcutAdvisor();
defaultPointAdvisor.setPointcut(druidStatPointcut);
defaultPointAdvisor.setAdvice(druidStatInterceptor);
return defaultPointAdvisor;
}
2.2 引入druid starter
引入druid starter后只需在application.yml中配置即可,不需要再Java中配置了!
2.2.1 pom.xml引入
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
2.2.2 添加Druid 相关配置
spring:
datasource:
# JDBC 配置必选配置:
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://localhost:3306/oms?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
username: root
password: 123456
# DruidDataSource配置属性列表
druid:
#初始化时建立物理连接的个数
initial-size: 3
#最小连接池数量
min-idle: 3
#最大连接池数量
max-active: 10
#获取连接时最大等待时间
max-wait: 60000
#配置监控页面访问登录名称
stat-view-servlet:
#是否启用StatViewServlet默认值true
enabled: true
#自定义监控页面路径
url-pattern: /druid/*
login-username: admin
#配置监控页面访问密码
login-password: admin
#配置允许白名单(既然有白名单,相应的就会有黑名单)
allow: 127.0.0.1
filter:
# 配置StatFilter,监控统计用的filter:stat
stat:
#只有配置druid.filter.stat.enabled=true时,才能看到sql监控页面的sql执行情况。
enabled: true
db-typr: mysql
#是否开启慢sql查询监控
log-slow-sql: true
#慢SQL执行时间
slow-sql-millis: 1
# 配置WallFilter,防火墙,防御SQL注入的filter:wall
wall:
enabled: true
db-type: mysql
config:
delete-allow: false
drop-table-allow: false
#日志用的filter:log4j
slf4j:
enabled: true
statement-create-after-log-enabled: true
statement-log-enabled: true
statement-executable-sql-log-enable: true
statement-log-error-enabled: true
result-set-log-enabled: true
#web应用监控
web-stat-filter:
enabled: true
#不需要过滤的格式信息
exclusions: -*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
2.2.3 配置spring 监控
新建druid-bean.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 配置_Druid和Spring关联监控配置 -->
<bean id="druid-stat-interceptor"
class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor"></bean>
<!-- 方法名正则匹配拦截配置 -->
<bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut"
scope="prototype">
<property name="patterns">
<list>
<value>com.wqc.web.*</value>
<value>com.wqc.service.*</value>
<value>com.wqc.dao.*</value>
</list>
</property>
</bean>
<aop:config proxy-target-class="true">
<aop:advisor advice-ref="druid-stat-interceptor"
pointcut-ref="druid-stat-pointcut" />
</aop:config>
</beans>
引入该xml
或者使用Java Configuration的配置方式,不用上面的xml方式:
@Bean
public DruidStatInterceptor druidStatInterceptor() {
DruidStatInterceptor dsInterceptor = new DruidStatInterceptor();
return dsInterceptor;
}
@Bean
@Scope("prototype")
public JdkRegexpMethodPointcut druidStatPointcut() {
JdkRegexpMethodPointcut pointcut = new JdkRegexpMethodPointcut();
pointcut.setPattern("com.wqc.data.dao.*");
return pointcut;
}
@Bean
public DefaultPointcutAdvisor druidStatAdvisor(DruidStatInterceptor druidStatInterceptor, JdkRegexpMethodPointcut druidStatPointcut) {
DefaultPointcutAdvisor defaultPointAdvisor = new DefaultPointcutAdvisor();
defaultPointAdvisor.setPointcut(druidStatPointcut);
defaultPointAdvisor.setAdvice(druidStatInterceptor);
return defaultPointAdvisor;
}
2.3 访问Druid
打开并登陆http://localhost:8080/druid查看SQL监控
打开并登陆http://localhost:8080/druid查看Spring监控