带你了解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")
    @Bean
    public 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")
    @Bean
    public 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的监控页功能
    @Bean
    public ServletRegistrationBean statViewServlet() {
        //创建StatViewServlet
        StatViewServlet 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")
    @Bean
    public 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 {

    @Resource
    private 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关联的监控数据
    @Bean
    public FilterRegistrationBean webStatFilter() {
        //创建 WebStatFilter
        WebStatFilter webStatFilter = new WebStatFilter();

        FilterRegistrationBean<WebStatFilter> filterRegistrationBean =
                new FilterRegistrationBean<>(webStatFilter);

        //默认对所有的url请求进行监控
        filterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));

      //排除指定的url
        filterRegistrationBean.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*/ {

    @Bean
    public WebMvcConfigurer webMvcConfigurer() {

        return new WebMvcConfigurer() {
            @Override
            public 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: 10MB
      max-request-size: 50MB
  datasource: #配置数据源
    # 说明: 如果你没有指定useSSL=true ,启动项目会报红警告, 环境的问题,需要灵活处理
    url: jdbc:mysql://localhost:3306/furn_ssm?useSSL=true&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
    #配置druid和监控功能
    druid:
      stat-view-servlet:
        enabled: true
        login-username: jack
        login-password: 666
        reset-enable: false
      web-stat-filter: #配置web监控
        enabled: true
        url-pattern: /*
        exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
      filter:
        stat: #sql监控
          slow-sql-millis: 1000
          log-slow-sql: true
          enabled: true
        wall: #配置sql防火墙
          enabled: true
          config:
            drop-table-allow: false
            select-all-column-allow: false
重启项目,完成测试

完成测试

image-20230819222426229

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/85876.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VBA Excel函数的使用

一个简单的教程&#xff0c;实现VBA自定义函数。 新建模块 复制后面的代码放进来 函数的入口参数不定义&#xff0c;则认为是一块区域&#xff1b; 反之&#xff0c;如FindChar1 As String&#xff0c;则认为是输入的单值。 循环和分支如下例子&#xff0c;VB比较接近自然语…

删除ubuntu开始菜单中的图标

背景 本来是很好看干净的界面 更新谷歌浏览器后出现了Gmail&#xff0c;幻灯片&#xff0c;谷歌硬盘等跟谷歌相关的乱七八糟东西搞得界面就很丑 解决问题 删掉那个图标 输入命令 sudo nautilus /usr/share/applicationssudo nautilus ~/.local/share/applications可以…

爬虫借助代理会让网速快点吗?

亲爱的程序员朋友们&#xff0c;你曾经遇到过爬虫网速慢的情况吗&#xff1f;别着急&#xff01;今天我将和你一起探讨一下使用代理是否可以加速爬虫&#xff0c;让我们一起进入这个轻松又专业的知识分享。 一、原因和机制的解析 1.IP限制 某些网站为了保护资源和防止爬虫行…

js逆向工具-v-jstools插件自动补环境

目录 一、反爬参数如图二、知识点提前Get三、v_jstools安装四、详细分析流程方法一&#xff1a;本案例操作流程之-生成临时环境-直接可以用的情况方法二&#xff1a;本案例操作流程之-生成临时环境-不可以直接用&#xff0c;需要调试补下 五、文章与视频 一、反爬参数如图 二、…

2023-08-22 Unity Shader 开发入门2 —— Shader 开发介绍

文章目录 一、必备概念1 计算机图形程序接口2 图形接口程序与其他概念的联系 二、Shader 开发1 Shader2 Shader 开发3 需掌握的内容 一、必备概念 1 计算机图形程序接口 ​ 计算机图形程序接口&#xff08;Graphics API&#xff09;是一套可编程的开放标准&#xff0c;不论 2…

【C++奇遇记】内存模型

&#x1f3ac; 博客主页&#xff1a;博主链接 &#x1f3a5; 本文由 M malloc 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;LeetCode刷题集 数据库专栏 初阶数据结构 &#x1f3c5; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如…

五种 CSS 位置类型以实现更好的布局

在 Web 开发中&#xff0c;CSS&#xff08;层叠样式表&#xff09;用于设置网站样式的设置。为了控制网页上元素的布局&#xff0c;使用CSS的position属性。因此&#xff0c;在今天这篇文章中&#xff0c;我们将了解 CSS 位置及其类型。 CSS 位置属性用于控制网页上元素的位置…

Anaconda Conda实现Python多环境管理

Anaconda Conda实现Python多环境管理 Python多环境AnacondaConda环境管理下载安装镜像配置环境管理常用命令创建Python3.10环境 Python多环境 Python多环境指的是在同一台计算机上同时安装并管理多个不同的Python版本。可以在不同版本的Python之间切换&#xff0c;并确保每个项…

FastDeploy部署(C++ Win10)

参考链接&#xff1a;FastDeploy C部署保姆级教程 FastDeploy是百度为了解决AI部署落地难题&#xff0c;发布的新一代面向产业实践的推理部署工具。它旨在为AI开发者提供模型部署最优解&#xff0c;具备全场景、简单易用、极致高效三大特点。项目地址&#xff1a;FastDeploy项…

数据库概述

目录 数据库 数据库的基本概念 数据 表 数据库 数据库管理系统 数据库系统 DBMS的主要功能 DBMS的工作模式 ​编辑 数据库的发展 数据库类型 关系数据库 关系数据库的构成 非关系数据库 非关系型数据库的优点 关系型数据库与非关系型数据库的区别 数据库 数据库…

openCV实战-系列教程2:阈值与平滑处理(图像阈值/图像平滑处理/高斯/中值滤波)、源码解读

1、图像阈值 t图像阈值函数&#xff0c;就是需要判断一下像素值大于一个数应该怎么处理&#xff0c;小于一个数应该怎么处理 ret, dst cv2.threshold(src, thresh, maxval, type) 参数解析&#xff1a; src&#xff1a; 原始输入图&#xff0c;只能输入单通道图像&#…

Shell 编程快速入门 之 数学计算和函数基础

目录 1. 求两数之和 整数之和 浮点数之和 2. 计算1-100的和 for...in C风格for循环 while...do until...do while和until的区别 关系运算符 break与continue的区别 3. shell函数基础知识 函数定义 函数名 函数体 参数 返回值 return返回值的含义 return与…

【Ubuntu】从Graylog到Grafana Loki:构建更强大的网络设备管理和监控系统

在将Graylog部署到生产环境时&#xff0c;我们遇到了一些问题&#xff0c;其中最主要的是无法安装MongoDB并且无法随时重启机器去修改BIOS设置来修复问题 【WARNING: MongoDB 5.0 requires a CPU with AVX support, and your current system does not appear to have that! 】。…

AI 绘画Stable Diffusion 研究(十一)sd图生图功能详解-美女换装

免责声明: 本案例所用安装包免费提供&#xff0c;无任何盈利目的。 大家好&#xff0c;我是风雨无阻。 为了让大家更直观的了解图生图功能&#xff0c;明白图生图功能到底是干嘛的&#xff0c;能做什么事情&#xff1f;今天我们继续介绍图生图的实用案例-美女换装的制作。 对于…

第6天----【位运算进阶之-----位与()】七夕特别版

今天我们来学习C语言的位与。 ❤️C语言的位与&#xff08;&&#xff09;操作是一种按位运算符&#xff0c;用于对两个操作数的每个对应位执行逻辑与操作。它的操作规则如下&#xff1a; 如果两个操作数的对应位都为1&#xff0c;则结果的对应位也为1。&#xff08;全1才…

pdf怎么转换成图片?用这几种简单方法搞定

pdf怎么转换成图片&#xff1f;PDF作为一种通用的文档格式&#xff0c;广泛应用于各个领域。然而&#xff0c;在某些情况下&#xff0c;我们可能需要将PDF文件转换成图片格式&#xff0c;以便更方便地在网页、社交媒体或演示中使用。下面就给大家介绍三种简单而高效的方法来实现…

基于springboot灾区物资管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

【Leetcode】移动零

移动零 题目描述算法描述编程代码 链接: 移动零 题目描述 算法描述 编程代码 class Solution { public:void moveZeroes(vector<int>& nums) {//题目要求不可以复制数组&#xff0c;开辟额外空间int dest -1,curr 0;for(;curr < nums.size();curr){if(nums[cu…

linux中互斥锁,自旋锁,条件变量,信号量,与freeRTOS中的消息队列,信号量,互斥量,事件的区别

RTOS 对于目前主流的RTOS的任务&#xff0c;大部分都属于并发的线程。 因为MCU上的资源每个任务都是共享的&#xff0c;可以认为是单进程多线程模型。 【freertos】003-任务基础知识 在没有操作系统的时候两个应用程序进行消息传递一般使用全局变量的方式&#xff0c;但是如…

jenkins 是什么?

一、jenkins 是什么&#xff1f; Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具&#xff0c;起源于Hudson&#xff0c;主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。Jenkins用Java语言编写&#xff0c;可在Tomcat等流行的servlet容器中运行&#…