SpringBoot结合Druid实现SQL监控

1、前言

SpringBoot不用我多介绍了吧,目前后端最流行的框架。后端开发人员最基本的要求。
Druid数据库连接池,出自国内 ”java圣地" 阿里巴巴。
Druid是一个用于大数据实时查询和分析的高容错、高性能开源分布式系统,旨在快速处理大规模的数据,并能够实现快速查询和分析。

  1. Druid的低延迟数据摄取架构允许事件在它们创建后毫秒内可被查询到,这使其具有快速的交互式查询能力。同时,Druid的数据在系统更新时依然可用,规模的扩大和缩小都不会造成数据丢失,这意味着它具有高可用性。
  2. Druid出自Alibaba,已实现每天能够处理数十亿事件和TB级数据,说明其具有可扩展性。在实际应用场景中,例如需要交互式聚合和快速探究大量数据、需要实时查询分析、具有大量数据等情况下,Druid都可以发挥出其高可用、高容错、高性能的优势。

总的来说,Druid是一个功能强大、性能优异且具有良好扩展性的分布式系统,适用于处理大规模数据并支持实时查询和分析。

如果想了解Druid数据库连接池在Java中最基本的使用,可以看我之前的文章:
Alibaba Druid数据库连接池直接起飞

其他文档的链接地址:

  • GitHub地址: https://github.com/alibaba/druid
  • 官方文档: https://github.com/alibaba/druid/wiki/Druid连接池介绍
  • Starter文档: https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

2、Druid数据库连接池的基本参数

参数名称默认值说明
driver-class-namenull数据库连接驱动
usernamenull数据库连接用户名
passwordnull数据库连接密码
url null数据库连接的URL
initial-size0初始化时建立连接的个数
max-active 8最大连接池数量
min-idle0最小连接池数量
max-wait-1获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
use-global-data-source-stattrue是否开启SQL统计
validation-querynull用来检测连接是否有效的sql,要求是一个查询语句,常用SELECT 1 FROM DUAL
validation-query-timeout-1检测连接是否有效的超时时间,单位是秒
login-timeoutnullDruid Monitor登录超时时间
transaction-query-timeoutnull事务查询超时时间
query-timeoutnull查询超时时间
test-while-idletrue建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
time-between-eviction-runs-millis60s配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
min-evictable-idle-time-millis30分钟配置一个连接在池中最小生存的时间,单位是毫秒
max-evictable-idle-time-millis7小时配置连接池中连接,在时间段内一直空闲,被逐出连接池的时间,单位毫秒。
default-read-only null设置连接为只读状态
default-transaction-isolation null事务的隔离级别

以上标红的属性都是常用的属性,Druid连接池的参数有很多,在后面的配置中可以自行配置

3、实践

项目环境:

  1. IDEA 2023
  2. SpringBoot
  3. Mybatis-plus
  4. lombok
  5. Druid-starter
  6. MySQL 8.0

3.1、导入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId>
</dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version>
</dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.20</version>
</dependency>

3.2、yaml文件

server:port: 8888spring:data:redis:host: localhostport: 6379main:lazy-initialization: truebanner-mode: offdatasource:druid:driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: 123456url: jdbc:mysql://localhost:3306/taobao?serverTimezone=Asia/Shanghaiinitial-size: 1 # 初始化时建立连接的个数max-active: 1 # 最大连接池数量min-idle: 1 # 最小连接池数量max-wait: 6000 # 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
#      pool-prepared-statements: false # 是否缓存preparedStatement, MySQL建议关闭use-global-data-source-stat: true # 开启SQL统计validation-query: SELECT 1 FROM DUAL #用来检测连接是否有效的sql,要求是一个查询语句,常用SELECT 1 FROM DUALvalidation-query-timeout: 3000 # 检测连接是否有效的超时时间,单位是秒login-timeout: 3000 # 登录超时时间transaction-query-timeout: 3000 # 事务查询超时时间query-timeout: 3000 # 查询超时时间
#      test-on-borrow: false # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
#      test-on-return: false # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能test-while-idle: true # 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
#      time-between-eviction-runs-millis: 30000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
#      min-evictable-idle-time-millis: 300000 #配置一个连接在池中最小生存的时间,单位是毫秒
#      max-evictable-idle-time-millis: 600000 #配置连接池中连接,在时间段内一直空闲,被逐出连接池的时间,单位毫秒。default-read-only: false # 是否只读default-transaction-isolation: 4 #事务的隔离级别web-stat-filter: # 开启Druid过滤器enabled: true # 开启StatFilterurl-pattern: /*exclusions: "*.jpg,*.png,*.jpeg"profile-enable: true # 是否监控单个URL调用的SQL列表stat-view-servlet: # 开启Druid Servlet拦截enabled: true # 是否启用StatViewServleturl-pattern: /druid/* #监控页面拦截urlreset-enable: true #是否启用重置功能login-password: druidlogin-username: druidaop-patterns:- /database/listfilter: # 进行慢SQL展示stat:enabled: trueslow-sql-millis: 500log-slow-sql: true # 以日志的形式输入SQLmerge-sql: true # 是否合并SQLdb-type: mysqlmybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplglobal-config:banner: falsemapper-locations: classpath:/mapper/*.xml

3.3、运行

项目启动后, 我们可以直接访问http://localhost:项目端口/druid/login.html就可以进行Druid Monitor.
这些页面都是Druid已经写好了的,就在我们引入的Jar包或者依赖里头:
在这里插入图片描述

3.3.1、登录页面

我们可以在登录页面输入我们设置好的login-username用户名和login-password密码进行登录.
在这里插入图片描述

3.3.2 、首页

我们可以在首页看到一些列运行的环境.
在这里插入图片描述

3.3.3 、SQL监控

因为我们配置了测试连接, 所以在项目启动后会进行一次连接测试, 连接测试的SQL就是validation-query参数所配置的SQL.
从图中也可以看出进行了连接测试
在这里插入图片描述

3.4 、编写controller进行测试

本项目使用了Mybatis-plus作为ORM框架, 具体的DAO层就是那么一套逻辑, 所以省略, 只显示controller接口层.

@RestController
@RequestMapping(value = "/database")
public class ProductController {@Resourceprivate ProductMapper productMapper;@GetMapping(value = "/list")public List<Product> productList(){return productMapper.selectPage(new Page<>(1, 10), null).getRecords();}}

我们可以很清楚的看到SQL的执行被监听到了.
在这里插入图片描述
因为我执行了分页的操作, Mybatis-plus的底层是执行了统计数量进行分页的两条SQL, 都被监听到了.

3.5 、其他参数

当我们能够进入到Druid Monitor后, 可以进入数据源页面.
在这里插入图片描述
表格最左侧的参数就是Druid可以配置的参数, 我这里使用的是中文进行展示, 伙伴们可以切换成英文进行展示.

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

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

相关文章

基于nodejs+vue 衣服穿搭推荐系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

Linux内核8. Linux内核的经典调试方式

1 内核调试以及工具总结 内核总是那么捉摸不透, 内核也会犯错, 但是调试却不能像用户空间程序那样, 为此内核开发者为我们提供了一系列的工具和系统来支持内核的调试. 内核的调试, 其本质是内核空间与用户空间的数据交换, 内核开发者们提供了多样的形式来完成这一功能. 2 用户…

第十六届中国智慧城市大会 | 国产化三维重建技术服务智慧城市建设

2023年10月13日&#xff0c;由武汉大势智慧科技有限公司、飞燕航空遥感技术有限公司主办的第十六届智慧城市大会-实景三维技术创新与应用论坛在广州成功举办。 来自实景三维、自然资源、数字孪生、AI大数据、航空遥感等多个领域的专家&#xff0c;深度分享各自的智慧城市建设经…

QT基础 柱状图

目录 1.QBarSeries 2.QHorizontalBarSeries 3.QPercentBarSeries 4.QHorizontalPercentBarSeries 5.QStackedBarSeries 6.QHorizontalStackedBarSeries 从上图得知柱状的基类是QAbstractBarSeries&#xff0c;派生出来分别是柱状图的水平和垂直类&#xff0c;只是类型…

BAT030:按列表名单将路径a下的文件夹批量复制到路径b

引言&#xff1a;编写批处理程序&#xff0c;实现按列表名单将路径a下的文件夹批量复制到路径b。 一、新建Windows批处理文件 参考博客&#xff1a; CSDNhttps://mp.csdn.net/mp_blog/creation/editor/132137544 二、写入批处理代码 1.右键新建的批处理文件&#xff0c;点击…

分布式微服务技术栈-SpringCloud<Eureka,Ribbon,nacos>

微服务技术栈 一、微服务 介绍了解1 架构结构案例与 springboot 兼容关系拆分案例拆分服务拆分-服务远程调用 2 eureka注册中心Eureka-提供者与消费者Eureka-eureka原理分析Eureka-搭建eureka服务Eureka-服务注册Eureka-服务发现 3 Ribbon组件 负载均衡Ribbon-负载均衡原理Ribb…

浅谈压力测试的重要目标及意义

随着互联网应用的快速发展&#xff0c;软件系统的稳定性和性能成为了用户和企业关注的焦点。用户期望应用程序能够在高负载下依然保持稳定和高效。为了满足这一需求&#xff0c;压力测试成为了不可或缺的一环。本文将探讨压力测试的重要性以及如何进行压力测试。 一、压力测试的…

大数据中间件——Kafka

Kafka安装配置 首先我们把kafka的安装包上传到虚拟机中&#xff1a; 解压到对应的目录并修改对应的文件名&#xff1a; 首先我们来到kafka的config目录&#xff0c;我们第一个要修改的文件就是server.properties文件&#xff0c;修改内容如下&#xff1a; # Licensed to the …

分类预测 | MATLAB实现基于BiLSTM-AdaBoost双向长短期记忆网络结合AdaBoost多输入分类预测

分类预测 | MATLAB实现基于BiLSTM-AdaBoost双向长短期记忆网络结合AdaBoost多输入分类预测 目录 分类预测 | MATLAB实现基于BiLSTM-AdaBoost双向长短期记忆网络结合AdaBoost多输入分类预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于BiLSTM-…

在中国,技术到底有多有用?

&#x1f64c;秋名山码民的主页 &#x1f602;oi退役选手&#xff0c;Java、大数据、单片机、IoT均有所涉猎&#xff0c;热爱技术&#xff0c;技术无罪 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 获取源码&#xff0c;添加WX 目录 前言1.…

【四:Spring整合Junit】

目录 相同点不同点1、导入依赖增加2、编写的位置不同。。路径一定要与实现类一致 相同点 前面都一样和Spring整合mybatis&#xff08;基于注解形式&#xff09;一样Spring整合Mybatis 不同点 1、导入依赖增加 <!-- 单元测试 --><dependency><groupId>junit&…

MYSQL学习笔记2-mysql数据文件

1.mysql数据文件类型&#xff1f;5.7和8的一些区别 创建一个anadb的数据库&#xff1a;在mysql安装目录下data目录下会产生一个同名的文件夹 建表&#xff1a;图为mysql57的数据文件图&#xff0c;不同的引擎建表会产生不同后缀名的文件 &#xff0c;mysql5.5以上默认使用 inno…

【高等数学】导数与微分

文章目录 1、导数的概念1.1、引例1.1.1、变速直线运动瞬时速度1.1.2、曲线的切线 1.2、导数的定义1.3、证明常用导数1.4、导数的几何意义1.5、可导与连续的关系 2、函数的求导法则2.1、函数的和、差、积、商的求导法则2.2、反函数的求导法则2.3、复合函数的求导法则2.4、基本初…

【Java 进阶篇】JavaScript 表单验证详解

JavaScript 表单验证是网页开发中不可或缺的一部分。它允许您确保用户在提交表单数据之前输入了有效的信息。无论您是一个初学者还是一个有经验的开发人员&#xff0c;本文将为您详细介绍如何使用 JavaScript 来进行表单验证。我们将从基础知识开始&#xff0c;逐步深入&#x…

【网络】用代码讲解HTTP协议

http协议 前言正式开始HTTP协议URLURL格式中每个字段所代表的内容格式中每个字段的作用URL对于特殊符号的处理 HTTP格式快速构建http请求和响应的报文格式http requesthttp response 一些细节http demo web目录代码实现 HTTP请求方法表单GET和POST提交的区别其余方法 HTTP的状态…

通过Python行命令搭建HTTP服务器结合内网穿透实现外网访问

文章目录 1.前言2.本地http服务器搭建2.1.Python的安装和设置2.2.Python服务器设置和测试 3.cpolar的安装和注册3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 1.前言 Python作为热度比较高的编程语言&#xff0c;其语法简单且语句清晰&#xff0c;而且python有…

BAT031:按列表名单将路径a下的文件夹批量剪切到路径b

引言&#xff1a;编写批处理程序&#xff0c;实现按列表名单将路径a下的文件夹批量剪切到路径b。 一、新建Windows批处理文件 参考博客&#xff1a; CSDNhttps://mp.csdn.net/mp_blog/creation/editor/132137544 二、写入批处理代码 1.右键新建的批处理文件&#xff0c;点击…

负荷不均衡问题分析处理流程

一、负荷不均衡分析 负荷不均衡判断标准&#xff1a;4G同覆盖扇区内存在无线利用率大于50%的小区&#xff0c;且两两小区间无线利用率差值大于30%&#xff0c;判定为4G负荷不均衡扇区&#xff1b;5G同覆盖扇区内存在无线利用率大于50%的小区&#xff0c;且两两小区间无线利用率…

安装宝塔面板(详细教程)

一、简介 宝塔面板是一款简单好用的服务器运维面板。它支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等100多项服务器管理功能。对于新手用云服务器来建站的话&#xff0c;宝塔面板是一个非常好用的工具。 宝塔官网&#xff1a;https://www.bt.cn/new/index.html 二、宝…

电脑开不了机用U盘重装系统Win10教程

如果我们遇到了电脑开不起机的问题&#xff0c;这给我们的正常使用带来了很大的影响。这时候我们可以借助U盘重装系统的方法&#xff0c;轻松应对这一问题。下面小编给大家详细介绍关于用U盘给开不机的电脑重装Win10系统的教程步骤&#xff0c;操作后用户就能正常使用电脑了。 …