忙里偷个闲,在这里分享一下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的更多相关文章

  1. Spring Boot:集成Druid数据源

    综合概述 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据 ...

  2. Spring Boot [使用 Druid 数据库连接池]

    导读 最近一段时间比较忙,以至于很久没有更新Spring Boot系列文章,恰好最近用到Druid, 就将Spring Boot 使用 Druid作为数据源做一个简单的介绍. Druid介绍: Dru ...

  3. spring boot + mybatis + druid配置实践

    最近开始搭建spring boot工程,将自身实践分享出来,本文将讲述spring boot + mybatis + druid的配置方案. pom.xml需要引入mybatis 启动依赖: < ...

  4. Spring Boot下Druid连接池+mybatis

      目前Spring Boot中默认支持的连接池有dbcp,dbcp2, hikari三种连接池.  引言: 在Spring Boot下默认提供了若干种可用的连接池,Druid来自于阿里系的一个开源连 ...

  5. Spring Boot + MyBatis + Druid + Redis + Thymeleaf 整合小结

    Spring Boot + MyBatis + Druid + Redis + Thymeleaf 整合小结 这两天闲着没事想利用**Spring Boot**加上阿里的开源数据连接池**Druid* ...

  6. Spring Boot: 加密应用配置文件敏感信息

    Spring Boot: 加密应用配置文件敏感信息 背景 我们的应用之前使用的是Druid数据库连接池,由于需求我们迁移到HikariCP连接池,druid 数据源加密提供了多种方式: 可以在配置文件 ...

  7. (16)Spring Boot使用Druid(编程注入)【从零开始学Spring Boot】

    在上一节使用是配置文件的方式进行使用druid,这里在扩散下使用编程式进行使用Druid,在上一节我们新建了一个类:DruidConfiguration我在这个类进行编码: package com.k ...

  8. Spring Boot:快速入门教程

    什么是Spring Boot? Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人 ...

  9. Spring Boot 整合 Druid

    Spring Boot 整合 Druid 概述 Druid 是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池.插件框架和 SQL 解析器组成.该项目主要是为了扩展 JDBC 的一些限制,可以让程 ...

随机推荐

  1. PBE加密算法

    这是我参加全国信息安全大赛的设计的加密系统中的一个加密算法,虽然比赛的结果不是非常理想但是,我还是学到了很多东西,现在和大家分享一下,比赛收获的东西. 基于口令加密 PBE(Password Base ...

  2. 三 vue学习三 从读懂一个Vue项目开始

    源码地址:     https://github.com/liufeiSAP/vue2-manage 我们的目录结构: 目录/文件 说明 build 项目构建(webpack)相关代码. config ...

  3. ++i和i++的效率孰优孰劣

    在内建数据类型的情况下,效率没有区别: 在自定义数据类型的情况下,++i效率更高! 分析: (自定义数据类型的情况下) ++i返回对象的引用: i++总是要创建一个临时对象,在退出函数时还要销毁它,而 ...

  4. idea2018.2.5版本使用之背景色

    idea 背景色: 写代码区换眼色豆沙色:

  5. Asset Catalog Help (十)---Specifying a Resizable Area of an Image

    Specifying a Resizable Area of an Image Use the Xcode Slicing feature to specify the dimensions of a ...

  6. spark学习之简介

    1.   Spark概述 1.1.  什么是Spark(官网:http://spark.apache.org) Spark是一种快速.通用.可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校A ...

  7. c/c++面试19-22----inline的那些事儿

    19 为什么引入内联函数 a:宏定义为什么效率高 通常替代c语言中表达式形式的宏定义来解决程序函数调用问题,使用的是预处理器实现,没有参数压栈等到做. 缺点: (1) 仅仅进行简单的替换,不能进行参数 ...

  8. VS Supercharger插件

    一.前言 Supercharger 是 VS 的一款插件,针对代码进行优化和着色,便于观察和区分. 二.下载及安装 下载的 URL 如下:Supercharger 下载地址 点击下载,下载完成以后,那 ...

  9. E20180607-hm

    duplicate v. 重复; 复制; 复印;  adj. 复制的; 副本的; 完全一样的;        n. 副本; 完全一样的东西; 复制品; adjacent adj. 相邻; 邻近的,毗邻 ...

  10. 洛谷 - P3377 - 【模板】左偏树(可并堆) - 左偏树 - 并查集

    https://www.luogu.org/problemnew/show/P3377 左偏树+并查集 左偏树维护两个可合并的堆,并查集维护两个堆元素合并后可以找到正确的树根. 关键点在于删除一个堆的 ...