带你了解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

带你了解SpringBoot---开启Durid 监控_第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 依赖


<dependency>
    <groupId>com.alibabagroupId>
    <artifactId>druidartifactId>
    <version>1.1.17version>
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 , 观察数据源的运行类型

带你了解SpringBoot---开启Durid 监控_第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 监控_第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<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 不会被拦截, 如果没有问题,会看到这个页面

带你了解SpringBoot---开启Durid 监控_第4张图片

带你了解SpringBoot---开启Durid 监控_第5张图片

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

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

    带你了解SpringBoot---开启Durid 监控_第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<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文档

带你了解SpringBoot---开启Durid 监控_第7张图片

登陆后请求SQL路径

带你了解SpringBoot---开启Durid 监控_第8张图片

带你了解SpringBoot---开启Durid 监控_第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 监控_第10张图片

带你了解SpringBoot---开启Durid 监控_第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<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 监控是否生效

带你了解SpringBoot---开启Durid 监控_第12张图片

带你了解SpringBoot---开启Durid 监控_第13张图片

image-20230819215849857

Durid 监控功能-SQL 防火墙

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

带你了解SpringBoot---开启Durid 监控_第14张图片

SQL 防火墙

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

带你了解SpringBoot---开启Durid 监控_第15张图片

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

带你了解SpringBoot---开启Durid 监控_第16张图片

带你了解SpringBoot---开启Durid 监控_第17张图片

Durid 监控功能-Session 监控

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

image-20230819220400596

带你了解SpringBoot---开启Durid 监控_第18张图片

Session 监控

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

带你了解SpringBoot---开启Durid 监控_第19张图片

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

带你了解SpringBoot---开启Durid 监控_第20张图片

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 的依赖





  1. 注销com/nlc/usersys/config/DruidDataSourceConfig.java

  2. 这时测试,druid 失效

带你了解SpringBoot---开启Durid 监控_第21张图片

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

带你了解SpringBoot---开启Durid 监控_第22张图片

带你了解SpringBoot---开启Durid 监控_第23张图片

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

带你了解SpringBoot---开启Durid 监控_第24张图片

  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 监控_第25张图片

你可能感兴趣的:(SpringBoot,spring,boot,sql,前端,java)