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

SpringBoot(数据库操作 + druid监控功能)

文章目录

    • 1.JDBC + HikariDataSource(SpringBoot2默认数据源)
        • 1.数据库表设计
        • 2.引入依赖 pom.xml
        • 3.配置数据源参数 application.yml
        • 4.编写一个bean,映射表
        • 5.编写测试类来完成测试
          • 1.引入依赖 pom.xml
          • 2.使用JdbcTemplate进行测试
          • 3.成功!
    • 2.整合Druid到SpringBoot
        • 1.基本介绍
        • 2.Druid基本使用
          • 1.引入德鲁伊依赖 pom.xml
          • 2.使用配置类注入DruidDataSource
          • 3.测试
          • 4.细节说明
    • 3.Druid监控功能
        • 1.SQL监控
          • 1.配置类中配置
          • 2.浏览器输入http://localhost:8080/druid/index.html查看监控页面
          • 3.配置类注入数据源时开启sql监控
          • 4.编写Controller进行测试
          • 5.浏览器请求Controller进行测试
          • 6.关于区间分布
        • 2.Web关联监控
          • 1.配置类配置webStatFilter
          • 2.测试
        • 3.SQL防火墙
          • 1.配置类注入数据源时添加过滤器
          • 2.测试
        • 4.Session监控(默认开启)
          • 测试
    • 4.目前阶段完整配置文件
        • 1.pom.xml
        • 2.application.yml 配置数据源信息
        • 3.DruidDataSourceConfig.java 配置类
    • 5.使用starter方式整合druid
        • 1.取消之前对druid的配置
          • 1.修改pom.xml注销druid的依赖
          • 2.注销整个DruidDataSourceConfig.java
          • 3.测试
        • 2.pom.xml 引入依赖
        • 3.application.yml 配置数据源和druid监控

1.JDBC + HikariDataSource(SpringBoot2默认数据源)

1.数据库表设计
-- 创建 spring_boot
DROP DATABASE IF EXISTS spring_boot;
CREATE DATABASE spring_boot;

USE spring_boot; 

-- 创建家居表
CREATE TABLE furn(
`id` INT(11) PRIMARY KEY AUTO_INCREMENT, ## id
`name` VARCHAR(64) NOT NULL, ## 家居名
`maker` VARCHAR(64) NOT NULL, ## 厂商
`price` DECIMAL(11,2) NOT NULL, ## 价格
`sales` INT(11) NOT NULL, ## 销量
`stock` INT(11) NOT NULL, ## 库存
`img_path` VARCHAR(256) NOT NULL ## 照片路径
);

-- 初始化家居数据
INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path`)
VALUES(NULL , ' 北 欧 风 格 小 桌 子 ' , ' 熊 猫 家 居 ' , 180 , 666 , 7 ,
'assets/images/product-image/1.jpg');
INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path`)
VALUES(NULL , ' 简 约 风 格 小 椅 子 ' , ' 熊 猫 家 居 ' , 180 , 666 , 7 ,
'assets/images/product-image/2.jpg');
INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path`)
VALUES(NULL , ' 典 雅 风 格 小 台 灯 ' , ' 蚂 蚁 家 居 ' , 180 , 666 , 7 ,
'assets/images/product-image/3.jpg');
INSERT INTO furn(`id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path`)
VALUES(NULL , ' 温 馨 风 格 盆 景 架 ' , ' 蚂 蚁 家 居 ' , 180 , 666 , 7 ,
'assets/images/product-image/4.jpg');

2.引入依赖 pom.xml
        <!--引入data-jdbc数据源-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</artifactId>
        </dependency>
        <!--引入mysql的驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <!--这里没有使用版本仲裁-->
            <version>5.1.49</version>
        </dependency>
3.配置数据源参数 application.yml
spring:
  datasource: #配置数据源
    url: jdbc:mysql://localhost:3306/spring_boot?useSSL=false&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
4.编写一个bean,映射表
package com.sun.springboot.bean;

import lombok.Data;

import java.math.BigDecimal;

/**
 * @author 孙显圣
 * @version 1.0
 */
@Data
public class Furn {
    private Integer id;
    private String name;
    private String maker;
    private BigDecimal price;
    private Integer sales;
    private Integer stock;
    private String imgPath;
}

5.编写测试类来完成测试
1.引入依赖 pom.xml
        <!--引入starter-test-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
2.使用JdbcTemplate进行测试
package com.sun.springboot;

import com.sun.springboot.bean.Furn;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author 孙显圣
 * @version 1.0
 */
@SpringBootTest
public class ApplicationTests {
    //使用JdbcTemplate
    @Resource
    private JdbcTemplate jdbcTemplate;

    @Test
    public void contextLoads() {
        //使用这个对象来封装查询结果
        BeanPropertyRowMapper<Furn> furnBeanPropertyRowMapper = new BeanPropertyRowMapper<>(Furn.class);

        //进行查询
        List<Furn> query = jdbcTemplate.query("select * from `furn`", furnBeanPropertyRowMapper);

        for (Furn furn : query) {
            System.out.println(furn);
        }
    }
}

3.成功!

image-20240316173540854

2.整合Druid到SpringBoot

1.基本介绍

image-20240316183227985

2.Druid基本使用
1.引入德鲁伊依赖 pom.xml
        <!--引入druid依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.17</version>
        </dependency>
2.使用配置类注入DruidDataSource
package com.sun.springboot.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

/**
 * @author 孙显圣
 * @version 1.0
 */
@Configuration
public class DruidDataSourceConfig {

    //注入一个德鲁伊数据源
    @ConfigurationProperties("spring.datasource") //读取yaml配置文件的参数,获取数据源配置
    @Bean
    public DataSource dataSource() {
        return new DruidDataSource();
    }
}


3.测试

image-20240316185111707

4.细节说明
  • @ConfigurationProperties(“spring.datasource”)只要配置了这个,就会自动读取yaml配置文件中配置的数据源信息
  • 只要注入了德鲁伊的数据源,则原来默认的数据源将不会被注入因为默认数据源的注入有条件注入的注解,只有在没有配置数据源的时候才会被注入

3.Druid监控功能

1.SQL监控
1.配置类中配置
    //配置德鲁伊监控sql功能
    @Bean
    public ServletRegistrationBean statViewServlet() {
        StatViewServlet statViewServlet = new StatViewServlet();
        ServletRegistrationBean<StatViewServlet> registrationBean =
                new ServletRegistrationBean<>(statViewServlet, "/druid/*");
    //配置登录监控页面用户名和密码
        registrationBean.addInitParameter("loginUsername", "root");
        registrationBean.addInitParameter("loginPassword", "root");
        return registrationBean;
    }
2.浏览器输入http://localhost:8080/druid/index.html查看监控页面

image-20240317095224595

3.配置类注入数据源时开启sql监控

image-20240317095522793

4.编写Controller进行测试
package com.sun.springboot.controller;

import com.sun.springboot.bean.Furn;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

/**
 * @author 孙显圣
 * @version 1.0
 */
@Controller
public class DruidSqlController {
    @Autowired
    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;
    }
}
5.浏览器请求Controller进行测试

image-20240317100130781

image-20240317100137652

6.关于区间分布

image-20240317100309519

2.Web关联监控
1.配置类配置webStatFilter
    //配置webStatFilter
    @Bean
    public FilterRegistrationBean 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;
    }
2.测试

image-20240317101645787

image-20240317101628965

3.SQL防火墙
1.配置类注入数据源时添加过滤器

image-20240317102059085

2.测试

image-20240317101645787

image-20240317102230202

4.Session监控(默认开启)
测试

image-20240317102507891

image-20240317102516873

4.目前阶段完整配置文件

1.pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.example</groupId>
    <artifactId>springboot-usersys</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>Archetype - springboot-usersys</name>
    <url>http://maven.apache.org</url>
    <!--导入springboot父工程-->
    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.5.3</version>
    </parent>
    <dependencies>
        <!--web场景启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
        </dependency>
        <!--thymeleaf场景启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <!--引入data-jdbc数据源-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</artifactId>
        </dependency>
        <!--引入mysql的驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <!--这里没有使用版本仲裁-->
            <version>5.1.49</version>
        </dependency>
        <!--引入starter-test-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <!--引入druid依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.17</version>
        </dependency>
    </dependencies>
</project>

2.application.yml 配置数据源信息
spring:
  datasource: #配置数据源
    url: jdbc:mysql://localhost:3306/spring_boot?useSSL=false&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
3.DruidDataSourceConfig.java 配置类
package com.sun.springboot.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
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 javax.sql.DataSource;
import java.sql.SQLException;
import java.util.Arrays;

/**
 * @author 孙显圣
 * @version 1.0
 */
@Configuration
public class DruidDataSourceConfig {

    //注入一个德鲁伊数据源
    @ConfigurationProperties("spring.datasource") //读取yaml配置文件的参数,获取数据源配置
    @Bean
    public DataSource dataSource() throws SQLException {
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setFilters("stat, wall"); //开启sql监控
        return druidDataSource;
    }

    //配置德鲁伊监控sql功能
    @Bean
    public ServletRegistrationBean statViewServlet() {
        StatViewServlet statViewServlet = new StatViewServlet();
        ServletRegistrationBean<StatViewServlet> registrationBean =
                new ServletRegistrationBean<>(statViewServlet, "/druid/*");
        //配置登录监控页面用户名和密码
        registrationBean.addInitParameter("loginUsername", "root");
        registrationBean.addInitParameter("loginPassword", "root");
        return registrationBean;
    }

    //配置webStatFilter
    @Bean
    public FilterRegistrationBean 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;
    }
}


5.使用starter方式整合druid

1.取消之前对druid的配置
1.修改pom.xml注销druid的依赖

image-20240317103054268

2.注销整个DruidDataSourceConfig.java
3.测试

image-20240317103302209

2.pom.xml 引入依赖
        <!--引入德鲁伊的starter-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.17</version>
        </dependency>
3.application.yml 配置数据源和druid监控
spring:
  datasource: #配置数据源
    url: jdbc:mysql://localhost:3306/spring_boot?useSSL=false&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
    #配置德鲁伊监控功能
    druid:
      stat-view-servlet:
        enabled: true
        login-username: root
        login-password: root
        reset-enable: false
    #配置web监控
      web-stat-filter:
        enabled: true
        url-pattern: /*
        exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
    #配置sql监控
      filter:
        stat:
          log-slow-sql: true
          slow-sql-millis: 1000 #1000毫秒就算慢查询
          enabled: true
        wall:
          enabled: true
          config:
            #黑白名单
            drop-table-allow: false #不允许删除表
            select-all-column-allow: false #不允许查询所有字段



http://www.kler.cn/a/272815.html

相关文章:

  • springboot如何解析 Map 的泛型信息来确定要注入哪些 Bean?
  • 微服务中引入消息队列的利弊
  • 【2024年华为OD机试】 (C卷,100分)- 小明找位置(Java JS PythonC/C++)
  • Android 12.0 息屏休眠后立即启动屏保功能实现
  • C++实现设计模式---外观模式 (Facade)
  • C++:工具VSCode的编译和调试文件内容:
  • 仰卧起坐计数,YOLOV8POSE
  • Qt篇——QChartView获取鼠标停留位置的数值
  • B140XW01 V8 +OZ9956B PDF
  • echarts实践总结(常用一):柱状图(特点:渐变色、点击缩放、左右滑动、悬浮展示样式)
  • 丘一丘正则表达式
  • Redis内存淘汰机制
  • 2024.3.14 ARM
  • 免费开源、支持自建服务的团队协作、个人学习文档管理系统
  • 8. 文字穿透效果
  • 【九】【算法分析与设计】双指针(3)
  • 蓝桥杯每日一题(BFS)
  • “代码不熄,创造不止:揭秘程序员为何让电脑永不停歇“
  • DM数据库(docker)
  • 【LeetCode每日一题】310. 最小高度树
  • 如何计算视频流需要的服务器带宽
  • 在AI创业热潮下,如何抓住AI赚钱机会,实现人生逆袭
  • 【兔子机器人】实现从初始状态到站立
  • Python实战:sqlite3模块应用
  • 跨境电商应该用什么样的服务器?多大带宽?
  • 产品经理:前端实现网页防篡改,你会怎么做?