当前位置: 首页 > news >正文

带你了解SpringBoot---开启Durid 监控

文章目录

  • 数据库操作--开启Durid 监控
    • 整合Druid 到Spring-Boot
      • 官方文档
      • 基本介绍
      • Durid 基本使用
        • 代码实现
      • Durid 监控功能-SQL 监控
        • 需求:
        • SQL 监控数据
        • SQL 监控数据-测试页面
      • Durid 监控功能-Web 关联监控
        • 需求:
        • Web 关联监控配置-Web 应用、URI 监控
        • 重启项目
      • Durid 监控功能-SQL 防火墙
        • SQL 防火墙
      • Durid 监控功能-Session 监控
      • Session 监控
      • Druid Spring Boot Starter
        • 基本介绍
        • 应用实例
          • 具体实现
          • 重启项目,完成测试

数据库操作–开启Durid 监控

整合Druid 到Spring-Boot

官方文档

使用手册: https://github.com/alibaba/druid

image-20230819203149225

  • 中文手册: https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
  • English手册: https://github.com/alibaba/druid/wiki/FAQ
  • Druid Spring Boot Starter 手册:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

基本介绍

  1. HiKariCP: 目前市面上非常优秀的数据源, 是springboot2 默认数据源。

  2. Druid: 性能优秀,Druid 提供性能卓越的连接池功能外【Java 基础】,还集成了SQL 监控,黑名单拦截等功能,强大的监控特性,通过Druid 提供的监控功能,可以清楚知道连接池和SQL 的工作情况,所以根据项目需要,我们也要掌握Druid 和SpringBoot 整合。

  3. 整合Druid 到Spring-Boot 方式
    ● 自定义方式
    ● 引入starter 方式

Durid 基本使用

需求: 将Spring-Boot 的数据源切换成Druid

代码实现

1.修改pom.xml , 引入druid 依赖

<!-- 引入druid 依赖-->
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.17</version>
</dependency>

2.创建com/nlc/usersys/config/DruidDataSourceConfig.java 配置类

@Configuration
public class DruidDataSourceConfig {//编写方法,注入DruidDataSource//说明:为什么我们注入自己的DataSource , 默认的HiKariDatasource失效?//1. 默认的数据源是如配置? @ConditionalOnMissingBean({ DataSource.class, XADataSource.class })// 解读:通过@ConditionalOnMissingBean({ DataSource.class}) 判断如果容器有DataSource Bean 就不注入默认的HiKariDatasource//2. debug源码.@ConfigurationProperties("spring.datasource")@Beanpublic DataSource dataSource() throws SQLException {//1. 配置了 @ConfigurationProperties("spring.datasource")//   就可以读取到application.yml的配置//2. 我们就不需要调用DruidDataSource 对象的setXxx, 会自动关联DruidDataSource druidDataSource = new DruidDataSource();
//        druidDataSource.setUrl("jdbc:mysql://localhost:3306/furn_ssm?useSSL=true&useUnicode=true&characterEncoding=UTF-8");
//        druidDataSource.setUsername("root");
//        druidDataSource.setPassword("123456");return druidDataSource;}
}
  1. 完成测试,运行ApplicationTests.java , 观察数据源的运行类型

image-20230819211142111

Durid 监控功能-SQL 监控

需求:

配置Druid 的监控功能,包括SQL 监控、SQL 防火墙、Web 应用、Session 监控等

SQL 监控数据

  1. 修改com/nlc/usersys/config/DruidDataSourceConfig.java , 增加druid 监控功能
    地址:https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatViewServlet%E9%85%8D%E7%BD%AE

image-20230819212727392

@Configuration
public class DruidDataSourceConfig {//编写方法,注入DruidDataSource//说明:为什么我们注入自己的DataSource , 默认的HiKariDatasource失效?//1. 默认的数据源是如配置? @ConditionalOnMissingBean({ DataSource.class, XADataSource.class })// 解读:通过@ConditionalOnMissingBean({ DataSource.class}) 判断如果容器有DataSource Bean 就不注入默认的HiKariDatasource//2. debug源码.@ConfigurationProperties("spring.datasource")@Beanpublic DataSource dataSource() throws SQLException {//1. 配置了 @ConfigurationProperties("spring.datasource")//   就可以读取到application.yml的配置//2. 我们就不需要调用DruidDataSource 对象的setXxx, 会自动关联DruidDataSource druidDataSource = new DruidDataSource();
//        druidDataSource.setUrl("jdbc:mysql://localhost:3306/furn_ssm?useSSL=true&useUnicode=true&characterEncoding=UTF-8");
//        druidDataSource.setUsername("root");
//        druidDataSource.setPassword("123456");return druidDataSource;}//配置druid的监控页功能@Beanpublic ServletRegistrationBean statViewServlet() {//创建StatViewServletStatViewServlet statViewServlet = new StatViewServlet();ServletRegistrationBean<StatViewServlet> registrationBean =new ServletRegistrationBean<>(statViewServlet, "/druid/*");//设置init-parameter, 设置用户名和密码registrationBean.addInitParameter("loginUsername", "hhh");registrationBean.addInitParameter("loginPassword", "666666");return registrationBean;}
}
  1. 完成测试: 访问http://localhost:10000/druid/index.html 不会被拦截, 如果没有问题,会看到这个页面

image-20230819213106642

image-20230819213135404

  1. 修改com/nlc/usersys/config/DruidDataSourceConfig.java , 加入监控功能

    参考: https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter

    image-20230819213229524

 @ConfigurationProperties("spring.datasource")@Beanpublic DataSource dataSource() throws SQLException {//1. 配置了 @ConfigurationProperties("spring.datasource")//   就可以读取到application.yml的配置//2. 我们就不需要调用DruidDataSource 对象的setXxx, 会自动关联DruidDataSource druidDataSource = new DruidDataSource();
//        druidDataSource.setUrl("jdbc:mysql://localhost:3306/furn_ssm?useSSL=true&useUnicode=true&characterEncoding=UTF-8");
//        druidDataSource.setUsername("root");
//        druidDataSource.setPassword("123456");//加入监控功能, 加入了sql防火墙监控druidDataSource.setFilters("stat,wall");return druidDataSource;} 
  1. 创建com/nlc/usersys/controller/DruidSqlController.java ,模拟操作DB 的请求
@Controller
public class DruidSqlController {@Resourceprivate JdbcTemplate jdbcTemplate;@ResponseBody@GetMapping("/sql")public List<Furn> crudDB() {BeanPropertyRowMapper<Furn> rowMapper = new BeanPropertyRowMapper<>(Furn.class);List<Furn> furns = jdbcTemplate.query("select * from `furn`", rowMapper);for (Furn furn : furns) {System.out.println(furn);}return furns;}}

SQL 监控数据-测试页面

完成测试, 观察SQL 监控数据, 浏览器输入http://localhost:10000/druid/sql.html

各项的含义,请参考druid文档

image-20230819215042686

登陆后请求SQL路径

image-20230819215227433

image-20230819215248393

Durid 监控功能-Web 关联监控

需求:

配置Web 关联监控配置:Web 应用、URI 监控

官方文档https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

image-20230819215413558

image-20230819215430266

Web 关联监控配置-Web 应用、URI 监控

  1. 修改com/nlc/usersys/config/DruidDataSourceConfig.java , 注入/ 增加WebStatFilter 用于采集web-jdbc 关联监控的数据
 //配置WebStatFilter, 用于采集web-jdbc关联的监控数据@Beanpublic FilterRegistrationBean webStatFilter() {//创建 WebStatFilterWebStatFilter webStatFilter = new WebStatFilter();FilterRegistrationBean<WebStatFilter> filterRegistrationBean =new FilterRegistrationBean<>(webStatFilter);//默认对所有的url请求进行监控filterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));//排除指定的urlfilterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");return filterRegistrationBean;}
  1. 为了测试方便,修改com/nlc/usersys/config/WebConfig.java, 放行/sql 请求
@Configuration
public class WebConfig /*implements WebMvcConfigurer*/ {@Beanpublic WebMvcConfigurer webMvcConfigurer() {return new WebMvcConfigurer() {@Overridepublic void addInterceptors(InterceptorRegistry registry) {System.out.println("addInterceptors~~~");//注册拦截器registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/","/login","/images/**","/upload.html","/upload","/sql");}};}
}

重启项目

完成测试,重启项目,看看Web 应用和URI 监控是否生效

image-20230819215758889

image-20230819215831369

image-20230819215849857

Durid 监控功能-SQL 防火墙

需求: 配置SQL 防火墙
官方文档https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

image-20230819215935776

SQL 防火墙

  1. 修改com/nlc/usersys/config/DruidDataSourceConfig.java ,加入防火墙监控

image-20230819220209864

  1. 完成测试,重启项目,看看SQL 防火墙监控是否生效

image-20230819220246846

image-20230819220319060

Durid 监控功能-Session 监控

需求: 配置Session 监控
官方文档https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

image-20230819220400596

image-20230819221024958

Session 监控

  1. 重启项目, 先登录管理系统

image-20230819221118968

  1. 完成测试, 查看监控页需要输入用户名和密码, 点击Session 监控,可以看到相关信息(注意要登录用户系统,才能看到Session 监控信息)

image-20230819221341149

image-20230819221519711

Druid Spring Boot Starter

基本介绍

  1. 前面我们使用的是自己引入druid+配置类方式整合Druid 和监控
  2. Druid Spring Boot Starter 可以让程序员在Spring Boot 项目中更加轻松集成Druid 和监控

应用实例

需求: 使用Druid Spring Boot Starter 方式完成Druid 集成和监控

具体实现
  1. 修改pom.xml 注销druid 的依赖
<!--        <dependency>-->
<!--            <groupId>com.alibaba</groupId>-->
<!--            <artifactId>druid-spring-boot-starter</artifactId>-->
<!--            <version>1.1.17</version>-->
<!--        </dependency>-->
  1. 注销com/nlc/usersys/config/DruidDataSourceConfig.java

  2. 这时测试,druid 失效

image-20230819222058960

  1. 查看druid 文档https://github.com/alibaba/druid,引入druid starter

image-20230819222122642

image-20230819222132731

  1. 确认druid starter 引入哪些依赖

image-20230819222155458

  1. 修改resources/application.yml 增加配置参数
spring:servlet:multipart:max-file-size: 10MBmax-request-size: 50MBdatasource: #配置数据源# 说明: 如果你没有指定useSSL=true ,启动项目会报红警告, 环境的问题,需要灵活处理url: jdbc:mysql://localhost:3306/furn_ssm?useSSL=true&useUnicode=true&characterEncoding=UTF-8username: rootpassword: 123456driver-class-name: com.mysql.jdbc.Driver#配置druid和监控功能druid:stat-view-servlet:enabled: truelogin-username: jacklogin-password: 666reset-enable: falseweb-stat-filter: #配置web监控enabled: trueurl-pattern: /*exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'filter:stat: #sql监控slow-sql-millis: 1000log-slow-sql: trueenabled: truewall: #配置sql防火墙enabled: trueconfig:drop-table-allow: falseselect-all-column-allow: false
重启项目,完成测试

完成测试

image-20230819222426229

相关文章:

带你了解SpringBoot---开启Durid 监控

文章目录 数据库操作--开启Durid 监控整合Druid 到Spring-Boot官方文档基本介绍Durid 基本使用代码实现 Durid 监控功能-SQL 监控需求:SQL 监控数据SQL 监控数据-测试页面 Durid 监控功能-Web 关联监控需求:Web 关联监控配置-Web 应用、URI 监控重启项目 Durid 监控功能-SQL 防…...

matlab 点云精配准(3)——Trimmed ICP

目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示四、参考链接本文由CSDN点云侠原创,matlab 点云精配准(3)——Trimmed ICP。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 1、原理概述 见论文:[1] 李鑫,莫思特,黄华,…...

nodejs开发环境搭建示例

服务与后端 {"name": "AsaiCC","private": true,"version": "1.0.0","description": "","main": "main.js","bin": "index.js","author": "&…...

网络安全(大厂)面试题

以下为网络安全各个方向涉及的面试题&#xff0c;星数越多代表问题出现的几率越大&#xff0c;祝各位都能找到满意的工作。 注&#xff1a;本套面试题&#xff0c;已整理成pdf文档&#xff0c;但内容还在持续更新中&#xff0c;因为无论如何都不可能覆盖所有的面试问题&#xf…...

GC面临的困境,JVM是如何解决跨代引用的?

本文已收录至GitHub&#xff0c;推荐阅读 &#x1f449; Java随想录 微信公众号&#xff1a;Java随想录 原创不易&#xff0c;注重版权。转载请注明原作者和原文链接 文章目录 跨代引用问题记忆集卡表写屏障写屏障的伪共享问题 前面我们讲了可达性分析和根节点枚举&#xff0c…...

Qt下拉菜单

1&#xff0c;QComboBox 2&#xff0c;setMenu()---设置下拉菜单 AI对话未来丨智能写作对话: setMenu()是QWidget类的一个成员函数&#xff0c;在Qt中用于将一个菜单作为一个控件的下拉菜单设置。具体来说&#xff0c;它会把相应的菜单对象与该控件关联&#xff0c;并在控件上…...

考研C语言进阶题库——更新41-50题

目录 41.编写程序要求输出整数a和b若a和b的平方和大于100&#xff0c;则输出a和b的平方和&#xff0c;否则输出a和b的和 42.现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的&#xff1a;第一项是1/1&#xff0c;第二项是是…...

JVM——JVM 垃圾回收

文章目录 写在前面本节常见面试题本文导火索 1 揭开 JVM 内存分配与回收的神秘面纱1.1 对象优先在 eden 区分配1.2 大对象直接进入老年代1.3 长期存活的对象将进入老年代1.4 动态对象年龄判定1.5 主要进行 gc 的区域 2 对象已经死亡&#xff1f;2.1 引用计数法2.2 可达性分析算…...

浅析阿里云灵积(平台)模型服务

简介&#xff1a; DashScope灵积模型服务以模型为中心&#xff0c;致力于面向AI应用开发者提供品类丰富、数量众多的模型选择&#xff0c;并为其提供开箱即用、能力卓越、成本经济的模型服务API。DashScope灵积模型服务依托达摩院等机构的优质模型&#xff0c;在阿里云基础设施…...

使用 PyTorch 进行高效图像分割:第 1 部分

一、说明 在这个由 4 部分组成的系列中&#xff0c;我们将使用 PyTorch 中的深度学习技术从头开始逐步实现图像分割。我们将在本文中从图像分割所需的基本概念和想法开始本系列。 图1&#xff1a;宠物图像及其分割掩码&#xff08;来源&#xff1a;牛津-IIIT宠物数据集) 图像分…...

vellum (Discovering Houdini VellumⅡ柔体系统)学习笔记

视频地址&#xff1a; https://www.bilibili.com/video/BV1ve411u7nE?p3&spm_id_frompageDriver&vd_source044ee2998086c02fedb124921a28c963&#xff08;搬运&#xff09; 个人笔记如有错误欢迎指正&#xff1b;希望可以节省你的学习时间 ~享受艺术 干杯&#x1f37b…...

最优的家电设备交互方式是什么?详解家电设备交互的演进之旅

家电&#xff0c;在人们的日常生活中扮演着不可或缺的角色&#xff0c;也是提升人们幸福感的重要组成部分&#xff0c;那你了解家电的发展史吗&#xff1f; 70年代 结婚流行“四大件”&#xff1a;手表、自行车、缝纫机&#xff0c;收音机&#xff0c;合成“三转一响”。 80年…...

前端面试总结心得

1.放在HTML里的哪一部分JavaScripts会在页面加载的时候被执行&#xff1f; A、文件头部位置&#xff1b;B、文件尾&#xff1b;C、<head>标签部分&#xff1b;D、<body>标签部分 &#xff08;正确答案D&#xff09; 2.队列和栈的区别是什么&#xff1f; 答案&am…...

STL---list

目录 1. list的介绍及使用 1.1 list的介绍 1.2 list的使用注意事项 2.list接口介绍及模拟实现 2.1构造​编辑 2.2容量 2.3修改 3.list迭代器 4.迭代器失效 5.模拟实现 6.vector和list的区别 1. list的介绍及使用 1.1 list的介绍 list的文档介绍 1. list是可以在常…...

python判断ip所属地区 python 判断ip 网段

前言 IP地址是互联网中唯一标识一个设备的地址&#xff0c;有时候需要判断一个IP地址所属的地区&#xff0c;这就需要用到IP地址归属查询。本文将介绍Python如何通过IP地址查询所属地区并展示代码。 一、 IP地址归属查询 IP地址归属查询又称IP地址归属地查询、IP地址归属地定…...

大数据分析案例-基于LightGBM算法构建糖尿病确诊预测模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…...

Mysql查询重复数据常用方法

在平常的开发工作中&#xff0c;我们经常需要查询数据&#xff0c;比如查询某个表中重复的数据&#xff0c;那么&#xff0c;具体应该怎么实现呢&#xff1f;常用的方法都有哪些呢&#xff1f; 测试表中数据&#xff1a; 1&#xff1a;查询名字重复的数据 having&#xff1a; …...

Go framework-GORM

目录 一、GORM 1、GORM连接数据库 2、单表的增删改查 3、结构体名和表名的映射规则 4、gorm.Model匿名字段 5、结构体标签gorm 6、多表操作 7、常用方法 8、支持原生SQL 9、Gin整合GORM 一、GORM ORM&#xff1a;即Object-Relational Mapping&#xff0c;它的作用是在…...

FirmAE 工具安装(解决克隆失败 网络问题解决)

FirmAE官方推荐使用Ubuntu 18.04系统进行安装部署&#xff0c;FirmAE工具的安装部署十分简单&#xff0c;只需要拉取工具仓库后执行安装脚本即可。 首先运行git clone --recursive https://kgithub.com/pr0v3rbs/FirmAE命令 拉取FirmAE工具仓库&#xff0c;因为网络的问题&…...

css实现九宫格布局

要使用CSS实现九宫格布局&#xff0c;可以创建一个包含九个元素的容器&#xff0c;并使用display: grid属性将其设置为网格布局。然后&#xff0c;使用grid-template-columns和grid-template-rows属性来定义网格的行和列布局。接下来&#xff0c;使用grid-gap属性来设置网格的行…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...