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 的一些限制,可以让程 ...
随机推荐
- GC及其作用
Java GC 是垃圾回收机制,自动内存管理和垃圾清扫机制,释放内存中的资源和垃圾
- 【旧文章搬运】关于NtUserBuildHwndList的一点记录~
原文发表于百度空间,2011-04-07========================================================================== 该函数与r ...
- 了解Hadoop
Apache Hadoop 官网 Hadoop源码分析 参考1 参考2 Hadoop 是一个由 Apache 基金会所开发的分布式系统基础架构. Hadoop 的框架最核心的设计就是:HDFS(H ...
- python 并发编程之IO 模型
首先说一下 IO 发生时涉及的对象和步骤.以read 为例,会经历两个阶段: 1)等待数据准备 2)将数据从内核拷贝到进程中 二,阻塞Io(blocking IO) 在 Linux中 默认情况下所有 ...
- (3)ASP.NET Core 服务生命周期
1.前言 在ConfigureServices方法中的容器注册每个应用程序的服务,Asp.Core都可以为每个应用程序提供三种服务生命周期:●Transient(暂时):每次请求都会创建一个新的实例. ...
- ugui学习资料
官网文档 http://docs.unity3d.com/Manual/index.html 官网视频教程http://unity3d.com/learn/tutorials/modules/begi ...
- 理解Bitcode:一种中间代码
原文网址: http://www.cocoachina.com/ios/20150818/13078.html 今天试着用Xcode 7 beta 3在真机(iOS 8.3)上运行一下我们的工程,结果 ...
- PJzhang:国内常用威胁情报搜索引擎说明
猫宁!!! 参考链接: https://www.freebuf.com/column/136763.html https://www.freebuf.com/sectool/163946.html 如 ...
- java string(转)
初探Java字符串 优化变成了忧患:String.split引发的“内存泄露” String是java中的无处不在的类,使用也很简单.初学java,就已经有字符串是不可变的盖棺定论,解释通常是:它是f ...
- Linux 软连接和硬连接(转)
1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接]硬连接指通过索引节点 ...