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-8username: rootpassword: rootdriver-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@Resourceprivate JdbcTemplate jdbcTemplate;@Testpublic 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配置文件的参数,获取数据源配置@Beanpublic DataSource dataSource() {return new DruidDataSource();}
}
3.测试

image-20240316185111707

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

3.Druid监控功能

1.SQL监控
1.配置类中配置
    //配置德鲁伊监控sql功能@Beanpublic 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 {@AutowiredJdbcTemplate 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@Beanpublic FilterRegistrationBean webStatFilter() {WebStatFilter 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;}
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-8username: rootpassword: rootdriver-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配置文件的参数,获取数据源配置@Beanpublic DataSource dataSource() throws SQLException {DruidDataSource druidDataSource = new DruidDataSource();druidDataSource.setFilters("stat, wall"); //开启sql监控return druidDataSource;}//配置德鲁伊监控sql功能@Beanpublic ServletRegistrationBean statViewServlet() {StatViewServlet statViewServlet = new StatViewServlet();ServletRegistrationBean<StatViewServlet> registrationBean =new ServletRegistrationBean<>(statViewServlet, "/druid/*");//配置登录监控页面用户名和密码registrationBean.addInitParameter("loginUsername", "root");registrationBean.addInitParameter("loginPassword", "root");return registrationBean;}//配置webStatFilter@Beanpublic FilterRegistrationBean webStatFilter() {WebStatFilter 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;}
}

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-8username: rootpassword: rootdriver-class-name: com.mysql.jdbc.Driver#配置德鲁伊监控功能druid:stat-view-servlet:enabled: truelogin-username: rootlogin-password: rootreset-enable: false#配置web监控web-stat-filter:enabled: trueurl-pattern: /*exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"#配置sql监控filter:stat:log-slow-sql: trueslow-sql-millis: 1000 #1000毫秒就算慢查询enabled: truewall:enabled: trueconfig:#黑白名单drop-table-allow: false #不允许删除表select-all-column-allow: false #不允许查询所有字段

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的交通信号灯识别系统(深度学习+UI界面+训练数据集+Python代码)

摘要&#xff1a;本研究详细介绍了一种采用深度学习技术的交通信号灯识别系统&#xff0c;该系统集成了最新的YOLOv8算法&#xff0c;并与YOLOv7、YOLOv6、YOLOv5等早期算法进行了性能评估对比。该系统能够在各种媒介——包括图像、视频文件、实时视频流及批量文件中——准确地…

Python从COCO数据集中抽取某类别的数据

1、问题描述 今天需要训练一个人工智能检测模型&#xff0c;用于检测图片或视频中的人。自行收集训练数据费时费力&#xff0c;因而选择从公开数据集COCO中进行抽取。 2、数据准备 2.1 下载 COCO2017 数据集 train:http://images.cocodataset.org/zips/train2017.zip valid…

2023年蓝桥杯省赛——幸运数字

目录 题目链接&#xff1a;0幸运数字 - 蓝桥云课 (lanqiao.cn) 解法 思路 高级思路 总结 题目链接&#xff1a;0幸运数字 - 蓝桥云课 (lanqiao.cn) 解法 首先是我写了差不多一个小时的解法&#xff0c;裂开了&#xff0c;为什么我如此废物 思路 寻找第2023个在二进制、八…

http协议的历史与基本概念

文章目录 历史和发展起源&#xff1a;HTTP/0.9&#xff08;1991年&#xff09;&#xff1a;HTTP/1.0&#xff08;1996年&#xff0c;RFC 1945&#xff09;&#xff1a;HTTP/1.1&#xff08;1997年&#xff0c;RFC 2068&#xff1b;1999年更新为RFC 2616&#xff09;&#xff1a…

【MIT 6.S081】2020, 实验记录(9),Lab: file system

目录 Task 1&#xff1a;Large filesTask 2&#xff1a;Symbolic links2.1 增加一个系统调用 symlink2.2 新增文件类型2.3 新增 NOFOLLOW 标志位2.4 实现 sys_symlink 系统调用2.5 修改 sys_open 函数2.6 测试 Task 1&#xff1a;Large files 现在的 xv6 系统中&#xff0c;一…

算法——贪心算法

《算法图解》——贪心算法 # 首先创建一个表&#xff0c;包含所覆盖的州 states_needed set([mt,wa,or,id,nv,ut,az]) # 传入一个数组&#xff0c;转换成一个集合#可供选择的广播台清单 stations {} stations[kone] set([id,nv,ut]) #用集合表示想要覆盖的州&#xff0c;且不…

EMQX 4.0和EMQX 5.0集群架构实现1亿MQTT连接哪些改进

EMQX 5.0水平扩展能力得到了指数级提升&#xff0c;能够更可靠地承载更大规模的物联网设备连接量。 在EMQX5.0正式发布前的性能测试中&#xff0c;我们通过一个23节点的EMQX集群&#xff0c;全球首个达成了1亿MQTT连接每秒100万消息吞吐&#xff0c;这也使得EMQX 5.0成为目前为…

Jenkins流水线将制品发布到Nexus存储库

1、安装jenkins&#xff08;建议别用docker安装&#xff0c;坑太多&#xff09; docker run -d -p 8089:8080 -p 10241:50000 -v /var/jenkins_workspace:/var/jenkins_home -v /etc/localtime:/etc/localtime --name my_jenkins --userroot jenkins/jenkins:2.449 坑1 打开x…

Python使用 k 均值对遥感图像进行语义分割

本篇文章介绍K-means语义分割来估计 2000 年至 2023 年咸海水面的变化 让我们先看一下本教程中将使用的数据。这是同一地区的两张 RGB 图像,间隔 23 年,但很明显地表特性和大气条件(云、气溶胶等)不同。这就是为什么我决定训练两个独立的 k-Means 模型,每个图像一个。 首…

仰卧起坐计数,YOLOV8POSE

仰卧起坐计数&#xff0c;YOLOV8POSE 通过计算膝盖、腰部、肩部的夹角&#xff0c;计算仰卧起坐的次数

[江苏工匠杯]easyphp

先看源码 <?php highlight_file(__FILE__); $key1 0; $key2 0; ​ $a $_GET[a]; $b $_GET[b]; ​ if(isset($a) && intval($a) > 6000000 && strlen($a) < 3){if(isset($b) && 8b184b substr(md5($b),-6,6)){$key1 1;}else{die("…

mvn 相关命令汇总

1、需求 项目上一致是使用的mvn 进行打包, 对于项目上的一些mvn 命令&#xff0c;有时候会忘记&#xff0c;所以将mvn 汇总起来 2、命令汇总 ① mvn clean 将项目目录下的编译的文件清除掉,即target 文件夹的编译文件 ② mvn complie 编译项目的代码&#xff0c;生成class 文…

Spring boot2.7整合jetcache方法缓存

前面的文章 我们讲了 spring boot 整合 jetcache 做基本字符串数据缓存 但是 我这里有个这样的逻辑 我的 domain 包下 有一个 book 属性类 里面就 id 和 name 属性 设置了 对应的 set get函数 和一个整体的构造函数 package com.example.javadom.domain;public class book {pr…

TrueNAS怎么设置中文,最新2024版本安装详细说明

首先我们做好安装前的准备工作 1&#xff0c;ISO镜像安装包 2&#xff0c;虚拟机&#xff08;建议使用ESXI虚拟机环境&#xff09; 如果是物理机安装&#xff0c;建议先给底层安装虚拟机系统esxi&#xff0c;再在上面安装方便以后的管理&#xff0c;如果你想物理机直接安装&a…

3.15消费者权益保护教育宣传活动怎样联系媒体投稿宣传?

在315金融消费者权益保护教育宣传活动中,想要有效地联系媒体报道并进行便捷宣传,可以通过以下步骤来利用智慧软文发布系统进行操作: 1. 准备宣传素材: - 制作高质量的新闻稿件,内容应围绕金融消费者权益保护的主题,包含活动的目的、特色、实施计划、预期影响、参与方式等细节;…

怎么看一手伦敦银多少钱?

做伦敦银投资的朋友需要搞清楚“一手伦敦银多少钱”的问题&#xff0c;这也是伦敦银交易的基础问题。为什么需要搞清楚这个基础问题呢&#xff1f;有些基础问题我们不需要搞懂&#xff0c;但是关于一手伦敦银多少钱却需要搞清楚&#xff0c;因为这决定了投资者的资金利用率。 关…

复合材料热压机比例阀放大器

复合材料热压机动作主要依赖于其内置的液压系统。是工业生产中常用的设备&#xff0c;通过施加高温和高压来实现对材料的压制成型。为了确保热压板能够精确地上下移动以及保持所需的压力&#xff0c;通常会使用液压系统来控制。液压系统中必不可少的需要比例阀来控制油缸的运行…

【数字孪生】Nginx发布数字孪生三维建模模型服务及调用方法

【数字孪生】Nginx发布数字孪生三维建模模型服务及调用方法 一、需求二、实施步骤2.1 准备模型文件2.1.1 3D tiles模型2.1.2 3D Tiles标准文件格式 2.2 配置nginx server块2.2.1 Nginx能干啥 2.3 访问 三、实现效果 一、需求 利用三维渲染引擎Cesium加载3D tiles模型。 二、实…

下载JDK17版本详细教程(下载、安装、环境变量配置)

官网下载 Oracle 甲骨文中国 | 云应用和云平台 安装 更改自己的安装位置。点击下一步&#xff0c;记住自己的安装位置 环境配置 右键此电脑点击属性---高级系统设置----环境变量 在系统变量里面点击新建环境变量JAVA_HOME&#xff0c;下面填入自己的jdk安装地址&#xff0c…

关于微服务跨数据库联合查询的一些解决思路

微服务架构的一个非常明显的特征就是一个服务所拥有的数据只能通过这个服务的API来访问。通过这种方式来解耦&#xff0c;这样就会带来查询问题。以前通过join就可以满足要求&#xff0c;现在如果需要跨多个服务集成查询就会非常麻烦。 解决思路 下面提供几个思路仅供参考 表…