一导入相关核心包
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.20</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
二 在application.yml
spring:
datasource:
#===========JDBC 配置===========
url: jdbc:mysql://localhost:3306/shiro?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false
# 初始化线程池数量 最大数 最小数
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: root
type: com.alibaba.druid.pool.DruidDataSource
# 驱动包 8.0以上的配置
# =========== durid 连接池配置===========
druid:
initial-size: 5
max-active: 20
min-idle: 3
# 配置获取连接等待超时的时间 单位毫秒
max-wait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
time-between-eviction-runs-millis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
min-evictable-idle-time-millis: 300000
validation-query: select
test-while-idle: true
test-on-borrow: false
test-on-return: false
# 打开PSCache,并且指定每个连接上PSCache的大小
pool-prepared-statements: true
# 配置监控统计拦截器 日志配置 防火墙
# stat监控数据库性能
# wall 用于防火墙
# 日志 slf4j logback
# log4j
# log4j2
# 配置多个英文逗号分隔
filters: stat,wall,slf4j
max-pool-prepared-statement-per-connection-size: 20
# 合并多个DruidDataSource的监控数据
use-global-data-source-stat: true
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
# ===========监控配置===========
# WebStatFilter配置,说明请参考Druid Wiki,配置_配置WebStatFilter
web-stat-filter:
#是否启用StatFilter默认值false
enabled: true
# 拦截所有的
url-pattern: /*
# 排除一些不必要的url,比如*:js,/jslib/*等等:
exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico, /druid/*"
# 关闭和开启session 统计功能 默认关闭
# session-stat-enable: true
# sessionStatMaxCount是1000个
# session-stat-max-count: 1000
# 配置principalSessionName,使得druid能够知道当前的session的用户是谁
# principal-session-name:
# StatViewServlet配置,说明请参考Druid Wiki,配置_StatViewServlet配置
stat-view-servlet:
# 是否启用StatViewServlet默认值true
enabled: true
url-pattern: /druid/*
# 界面上有一个重置功能 执行这个操作之后,会导致所有计数器清零,重新计数 建议false
reset-enable: false
# 登录的后台的用户名,密码
login-username: admin
login-password: admin
# 访问控制,可以配置allow和deny这两个参数
# 配置格式 ip或者ip/子网掩码(24) 例如 192.168.2.112 ,192.168.2.112/24
# 注意 由于匹配规则不支持IPV6,配置了allow或者deny之后,会导致IPV6无法访问。
# allow:
# deny:
三、配置Druid Datasource
@Configuration
public class DruidConfiguration {
@Bean(destroyMethod = "close", initMethod = "init")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource druidDataSource() {
DruidDataSource druidDataSource = new DruidDataSource();
return druidDataSource;
}
/**
* 可以在配置文件中配置 如果在配置文件中配置了,请注释掉该代码
* 注册一个StatViewServlet
*
* @return
*/
@Bean
public ServletRegistrationBean druidStatViewServlet() {
//org.springframework.boot.context.embedded.ServletRegistrationBean提供类的进行注册.
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
//添加初始化参数:initParams
//白名单:
servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
// IP黑名单 (存在共同时,deny优先于allow) : 如果满足deny的话提示:
servletRegistrationBean.addInitParameter("deny", "");
//登录查看信息的账号密码.
servletRegistrationBean.addInitParameter("loginUsername", "admin");
servletRegistrationBean.addInitParameter("loginPassword", "admin");
//是否能够重置数据.
servletRegistrationBean.addInitParameter("resetEnable", "false");
return servletRegistrationBean;
}
/**
* 注册一个:filterRegistrationBean
*
* @return
*/
@Bean
public FilterRegistrationBean druidStatFilter() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
//添加过滤规则.
filterRegistrationBean.addUrlPatterns("/*");
//添加不需要忽略的格式信息.
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return filterRegistrationBean;
}
}
五、监控
访问 http://localhost:8080/druid, 使用上面配置的账号密码。
四、自动配置原理
源代码
@Configuration
@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })
@EnableConfigurationProperties(DataSourceProperties.class)
@Import({ DataSourcePoolMetadataProvidersConfiguration.class,
DataSourceInitializationConfiguration.class })
public class DataSourceAutoConfiguration {
// ...
}
说明
- DataSourceProperties 配置相关
- 首先找到@Import({ DataSourcePoolMetadataProvidersConfiguration.class,DataSourceInitializationConfiguration.class })
- 然后点击进入
DataSourcePoolMetadataProvidersConfiguration - 根据加载条件注解在三种数据库连接池自动装配
@ConditionalOnClass(org.apache.tomcat.jdbc.pool.DataSource.class)
@ConditionalOnClass(HikariDataSource.class)
@ConditionalOnClass(BasicDataSource.class)