带你了解SpringBoot---开启Durid 监控
作者:mmseoamin日期:2023-12-18

文章目录

  • 数据库操作--开启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

                    带你了解SpringBoot---开启Durid 监控,image-20230819203149225,第1张

                    • 中文手册: 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 依赖

                      
                      
                          com.alibaba
                          druid
                          1.1.17
                      
                      

                      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 , 观察数据源的运行类型

                      带你了解SpringBoot---开启Durid 监控,image-20230819211142111,第2张

                      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

                      带你了解SpringBoot---开启Durid 监控,image-20230819212727392,第3张

                      @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 registrationBean =
                                      new ServletRegistrationBean<>(statViewServlet, "/druid/*");
                              //设置init-parameter, 设置用户名和密码
                              registrationBean.addInitParameter("loginUsername", "hhh");
                              registrationBean.addInitParameter("loginPassword", "666666");
                              return registrationBean;
                          }
                      }
                      
                      1. 完成测试: 访问http://localhost:10000/druid/index.html 不会被拦截, 如果没有问题,会看到这个页面

                      带你了解SpringBoot---开启Durid 监控,image-20230819213106642,第4张

                      带你了解SpringBoot---开启Durid 监控,image-20230819213135404,第5张

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

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

                        带你了解SpringBoot---开启Durid 监控,image-20230819213229524,第6张

                       @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 crudDB() {
                              BeanPropertyRowMapper rowMapper = new BeanPropertyRowMapper<>(Furn.class);
                              List 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文档

                      带你了解SpringBoot---开启Durid 监控,image-20230819215042686,第7张

                      登陆后请求SQL路径

                      带你了解SpringBoot---开启Durid 监控,image-20230819215227433,第8张

                      带你了解SpringBoot---开启Durid 监控,image-20230819215248393,第9张

                      Durid 监控功能-Web 关联监控

                      需求:

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

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

                      带你了解SpringBoot---开启Durid 监控,image-20230819215413558,第10张

                      带你了解SpringBoot---开启Durid 监控,image-20230819215430266,第11张

                      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 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 监控是否生效

                      带你了解SpringBoot---开启Durid 监控,image-20230819215758889,第12张

                      带你了解SpringBoot---开启Durid 监控,image-20230819215831369,第13张

                      带你了解SpringBoot---开启Durid 监控,image-20230819215849857,第14张

                      Durid 监控功能-SQL 防火墙

                      需求: 配置SQL 防火墙

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

                      带你了解SpringBoot---开启Durid 监控,image-20230819215935776,第15张

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

                      带你了解SpringBoot---开启Durid 监控,image-20230819220209864,第16张

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

                      带你了解SpringBoot---开启Durid 监控,image-20230819220246846,第17张

                      带你了解SpringBoot---开启Durid 监控,image-20230819220319060,第18张

                      Durid 监控功能-Session 监控

                      需求: 配置Session 监控

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

                      带你了解SpringBoot---开启Durid 监控,image-20230819220400596,第19张

                      带你了解SpringBoot---开启Durid 监控,image-20230819221024958,第20张

                      Session 监控

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

                      带你了解SpringBoot---开启Durid 监控,image-20230819221118968,第21张

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

                      带你了解SpringBoot---开启Durid 监控,image-20230819221341149,第22张

                      带你了解SpringBoot---开启Durid 监控,image-20230819221519711,第23张

                      Druid Spring Boot Starter

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

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

                      具体实现
                      1. 修改pom.xml 注销druid 的依赖
                      
                      
                      
                      
                      
                      
                      1. 注销com/nlc/usersys/config/DruidDataSourceConfig.java

                      2. 这时测试,druid 失效

                      带你了解SpringBoot---开启Durid 监控,image-20230819222058960,第24张

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

                      带你了解SpringBoot---开启Durid 监控,image-20230819222122642,第25张

                      带你了解SpringBoot---开启Durid 监控,image-20230819222132731,第26张

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

                      带你了解SpringBoot---开启Durid 监控,image-20230819222155458,第27张

                      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
                      
                      重启项目,完成测试

                      完成测试

                      带你了解SpringBoot---开启Durid 监控,image-20230819222426229,第28张