Spring Boot :Druid Monitor
忙里偷个闲,在这里分享一下SpringBoot集成Druid实现数据库监控功能,有什么错误欢迎大家指出!
参考文件:
Spring实现Druid监控:https://www.cnblogs.com/wanghuijie/p/druid_monitor.html
DruidDataSource源码分析:https://www.cnblogs.com/wanghuijie/p/druiddatasource.html
保存Druid监控日志:https://www.cnblogs.com/wanghuijie/p/druid_stat_log.html
言归正传,看看是怎么实现的吧。
一:引入Druid依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.31</version>
</dependency>
二:在yml中添加druid配置
spring:
datasource:
# 配置多数据源时使用
main:
name: AA
driver-class-name: com.mysql.jdbc.Driver
# 对应自己的数据库连接
url: jdbc:mysql://
username: xxx
password: xxx
# Druid连接池的配置信息 Begin ##################################################
type: com.alibaba.druid.pool.DruidDataSource
#初始化连接大小
initialSize: 5
#最小连接池数量
minIdle: 5
#最大连接池数量
maxActive: 20
maxIdle: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
# 测试连接
validationQuery: SELECT 1 FROM DUAL
# 申请连接的时候检测,建议配置为true,不影响性能,并且保证安全性
testWhileIdle: true
# 获取连接时执行检测,建议关闭,影响性能
testOnBorrow: false
# 归还连接时执行检测,建议关闭,影响性能
testOnReturn: false
# 是否开启PSCache,PSCache对支持游标的数据库性能提升巨大,oracle建议开启,mysql下建议关闭
poolPreparedStatements: false
# 开启poolPreparedStatements后生效
maxPoolPreparedStatementPerConnectionSize: 20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall,log4j
logSlowSql: true
# Druid连接池的配置信息 End ######################################################
三: 使用java代码读取配置
package com.bjgoodwill.oip.hosp.practice.druid; import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
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;
import org.springframework.context.annotation.Primary; import javax.sql.DataSource;
import java.sql.SQLException; @Configuration
public class DruidSourceConfig { // 有多数据源时可调为多数据源的配置,如@Value("${spring.datasource.main.name}")
@Value("${spring.datasource.name}")
private String mainName; @Value("${spring.datasource.url}")
private String mainUrl; @Value("${spring.datasource.username}")
private String mainUsername; @Value("${spring.datasource.password}")
private String mainPassword; @Value("${spring.datasource.driver-class-name}")
private String mainDriverClassName; @Value("${spring.datasource.initialSize}")
private String mainInitialSize; @Value("${spring.datasource.minIdle}")
private String mainMinIdle; @Value("${spring.datasource.maxActive}")
private String mainMaxActive; @Value("${spring.datasource.maxWait}")
private String mainMaxWait; @Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
private String mainTimeBetweenEvictionRunsMillis; @Value("${spring.datasource.minEvictableIdleTimeMillis}")
private String mainMinEvictableIdleTimeMillis; @Value("${spring.datasource.validationQuery}")
private String mainValidationQuery; @Value("${spring.datasource.filters}")
private String mainFilters; @Value("{spring.datasource.logSlowSql}")
private String mainLogSlowSql; @Value("${spring.datasource.type}")
private String mainType; @Value("{spring.datasource.maxIdle}")
private String mainMaxIdle; @Bean
@Primary
public DataSource mainDataSource() {
DruidDataSource datasource = new DruidDataSource(); datasource.setUrl(mainUrl);
datasource.setUsername(mainUsername);
datasource.setPassword(mainPassword);
datasource.setDriverClassName(mainDriverClassName); //configuration
if (StringUtils.isNotBlank(mainInitialSize)) {
datasource.setInitialSize(Integer.parseInt(mainInitialSize));
}
if (StringUtils.isNotBlank(mainMinIdle)) {
datasource.setMinIdle(Integer.parseInt(mainMinIdle));
}
if (StringUtils.isNotBlank(mainMaxActive)) {
datasource.setMaxActive(Integer.parseInt(mainMaxActive));
}
if (StringUtils.isNotBlank(mainMaxWait)) {
datasource.setMaxWait(Integer.parseInt(mainMaxWait));
}
if (StringUtils.isNotBlank(mainTimeBetweenEvictionRunsMillis)) {
datasource.setTimeBetweenEvictionRunsMillis(Integer.parseInt(mainTimeBetweenEvictionRunsMillis));
}
if (StringUtils.isNotBlank(mainMinEvictableIdleTimeMillis)) {
datasource.setMinEvictableIdleTimeMillis(Integer.parseInt(mainMinEvictableIdleTimeMillis));
} datasource.setValidationQuery(mainValidationQuery);
datasource.setTestWhileIdle(true);
datasource.setTestOnBorrow(false);
datasource.setTestOnReturn(false);
try {
datasource.setFilters(mainFilters);
} catch (SQLException e) {
e.printStackTrace();
}
return datasource;
} @Bean
public ServletRegistrationBean statViewServlet(){
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
//设置ip白名单
servletRegistrationBean.addInitParameter("allow","");
//设置ip黑名单,优先级高于白名单
servletRegistrationBean.addInitParameter("deny","");
//设置控制台管理用户
servletRegistrationBean.addInitParameter("loginUsername","root");
servletRegistrationBean.addInitParameter("loginPassword","root");
//是否可以重置数据
servletRegistrationBean.addInitParameter("resetEnable","false");
return servletRegistrationBean;
} @Bean
public FilterRegistrationBean statFilter(){
//创建过滤器
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
//设置过滤器过滤路径
filterRegistrationBean.addUrlPatterns("/*");
//忽略过滤的形式
filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return filterRegistrationBean;
}
四: 执行效果


Spring Boot :Druid Monitor的更多相关文章
- Spring Boot:集成Druid数据源
综合概述 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据 ...
- Spring Boot [使用 Druid 数据库连接池]
导读 最近一段时间比较忙,以至于很久没有更新Spring Boot系列文章,恰好最近用到Druid, 就将Spring Boot 使用 Druid作为数据源做一个简单的介绍. Druid介绍: Dru ...
- spring boot + mybatis + druid配置实践
最近开始搭建spring boot工程,将自身实践分享出来,本文将讲述spring boot + mybatis + druid的配置方案. pom.xml需要引入mybatis 启动依赖: < ...
- Spring Boot下Druid连接池+mybatis
目前Spring Boot中默认支持的连接池有dbcp,dbcp2, hikari三种连接池. 引言: 在Spring Boot下默认提供了若干种可用的连接池,Druid来自于阿里系的一个开源连 ...
- Spring Boot + MyBatis + Druid + Redis + Thymeleaf 整合小结
Spring Boot + MyBatis + Druid + Redis + Thymeleaf 整合小结 这两天闲着没事想利用**Spring Boot**加上阿里的开源数据连接池**Druid* ...
- Spring Boot: 加密应用配置文件敏感信息
Spring Boot: 加密应用配置文件敏感信息 背景 我们的应用之前使用的是Druid数据库连接池,由于需求我们迁移到HikariCP连接池,druid 数据源加密提供了多种方式: 可以在配置文件 ...
- (16)Spring Boot使用Druid(编程注入)【从零开始学Spring Boot】
在上一节使用是配置文件的方式进行使用druid,这里在扩散下使用编程式进行使用Druid,在上一节我们新建了一个类:DruidConfiguration我在这个类进行编码: package com.k ...
- Spring Boot:快速入门教程
什么是Spring Boot? Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人 ...
- Spring Boot 整合 Druid
Spring Boot 整合 Druid 概述 Druid 是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池.插件框架和 SQL 解析器组成.该项目主要是为了扩展 JDBC 的一些限制,可以让程 ...
随机推荐
- CodeForces 1110G. Tree-Tac-Toe
题目简述:给定$n$个节点的树,其中一些节点被染成了白色(其余节点未染色).黑白双方博弈,白先动.轮到黑(白)方时,选择树上的一个未染色的节点并将其染成黑(白)色.率先达成三连色(即存在三个节点$a, ...
- SpringMVC数据绑定二(List、Set和Map类型)
1.List类型绑定 //联系信息类 用户类的子属性 public class ContactInfo { private String phone; private String address; ...
- 1.11-1.12 Sqoop导入数据时两种增量方式导入及direct
一.增量数据的导入 1.两种方式 ## query 有一个唯一标识符,通常这个表都有一个字段,类似于插入时间createtime where createtime => 201509240000 ...
- 20个Flutter实例视频教程-第04节: 不规则底部工具栏制作-2
视频地址: https://www.bilibili.com/video/av39709290/?p=4 博客地址: https://jspang.com/post/flutterDemo.html# ...
- 3、webpack打包出的文件解析
分析打包后的结果,看看打包后的结果是什么东西 把打包后的结果.注释什么的删删‘’ 当前是一个匿名函数. 默认的时候会执行,执行的时候会传一个对象,对象有几部分,第一部分是我们的key.第二部分是我们的 ...
- springboot+mongodb报错Caused by: java.net.ConnectException: Connection refused (Connection refused)
com.mongodb.MongoSocketOpenException: Exception opening socket at com.mongodb.connection.SocketStrea ...
- UVa 11825 Hackers' Crackdown (状压DP)
题意:给定 n 个计算机的一个关系图,你可以停止每台计算机的一项服务,并且和该计算机相邻的计算机也会终止,问你最多能终止多少服务. 析:这个题意思就是说把 n 台计算机尽可能多的分成一些组,使得每组的 ...
- 多行文字的垂直居中或高度不同的图片垂直居中---:after伪类+content
如何让多行文字垂直居中?或者如何让图片垂直居中? 1.demo--css .box { width: 300px; height: 300px; background-color: #f5e79e; ...
- 在win下启动memcached
memcached -m 64 -p 11211 -vvv 设置默认内存64,默认端口11211 ,输出功能及警告错误等信息
- ugui batches
先渲染非重叠,然后渲染重叠 如果两个图不是同一个图集,并且都不重叠,那么按节点挂载顺序渲染 节点挂接多复杂没关系,关键是节点在Canvas下的顺序,绑在同一节点或者全部绑在根节点Canvas下渲染 ...