强大的Druid

news2025/1/13 10:27:12

一 基本原理

一次数据库访问总共分几步?三步:第一步是创建一个连接;第二步是操作数据;第三步是释放连接。对于一个业务动作来说,我们并不关心第一步和第三步,我们真正关心的是第二步——操作数据。为了做一件事情,我们不得不额外做两件我们并不想做的事情。前面讲到的Spring Data JPA和MyBatisPlus将这个问题解决了一半——封装了数据库连接的创建和释放,这样虽然减少了我们的工作量,但仍然有很大的性能开销。因为创建和释放连接的操作都是非常耗时的操作,要解决这个问题,就需要使用数据库连接池了。

在应用初始化的时候,可以根据配置信息预先创建一些数据库连接对象,并存放于内存中。当需要访问数据库的时候,可以直接到连接池中“借”一个连接来用。当完成数据库操作以后,再将这个连接“还”给连接池,从而实现资源共享的目的。近几年很火的共享经济(共享单车、共享汽车、共享充电宝等)不就是这种思路吗?原来这些看起来新鲜的“玩法”早就被程序员们使用过了。

连接池技术避免了频繁创建与释放连接的情况,并且可以根据当前的使用情况来动态增减数据库连接数,做到一定程度上的按需“备货”,使得数据库资源的利用变得更加合理,不仅在速度上有了很大的提升,在稳定性上也得到了改善。

二 如何选择连接池

市面上有很多Java的数据库连接池组件,我们应该如何选择呢?下表所示为主流数据库连接池的对比。
在这里插入图片描述
Druid是阿里巴巴公司出品的一款非常优秀的数据库连接池组件,拥有强大的监控功能,同时保证了非常好的性能,并且其稳定性经过了阿里巴巴公司内部成千上万次的系统验证,还经受过历年“双十一”活动的考验。这些都足以说明Druid是一款兼具性能与稳定性的优秀数据库连接池组件,因此我们可以放心地使用它。

三 配置

Druid和Spring Boot的集成也非常简单

  • 添加pom依赖
  • 添加配置。

添加pom依赖
添加Druid的starter的引用:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.5</version>
</dependency>

添加配置

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://127.0.0.1:3306/springboot?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
      username: root
      password: 123456
      # 初始化大小、最大、最小
      initialSize: 5
      minIdle: 5
      maxActive: 20
      # 配置获取连接等待超时时间
      maxWait: 60000
      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      timeBetweenEvictionRunsMillis: 60000
      # 配置一个连接在连接池里的最小生存时间,单位是毫秒
      minEvictableIdleTimeMillis: 300000
      validationQuery: SELECT 1
      testWhileIdle: true
      # 申请连接时执行validationQuery,检测连接是否有效
      testOnBorrow: false
      # 归还连接时执行validationQuery,检测连接是否有效
      testOnReturn: false
      # 打开PSCache。并且指定每个连接上PSCache连接大小
      poolPreparedStatements: true
      maxPoolPreparedStatementPerConnectionSize: 20
      # 监控配置信息
      stat-view-servlet:
        # 开启监控页面
        enabled: true
        #        login-username: druid #监控系统用户名
        #        login-password: 123456 #监控系统密码
        # 是否允许清空监控数据
        reset-enable: true
        #监控系统路径
        url-pattern: "/druid/*"
        # allow: 127.0.0.1 # 可访问监控系统的ip地址列表(白名单)
      filters: stat,wall,slf4j
      # 用来打开sql参数化合并监控和慢sql记录
      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
      useGlobalDataSourceStat: true
      web-stat-filter:
        enabled: true
        url-pattern: /*
        exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
        profile-enable: true
      aop-patterns: com.shuijing.boot.*.controller.*,com.shuijing.boot.*.service.*,com.shuijing.boot.*.mapper.*
      filter:
        slf4j:
          enabled: true
          statement-executable-sql-log-enable: true

只要两步就配置好了,比“把大象放冰箱”还简单。启动程序后,控制台输出Init DruidDataSource的字样,说明Druid配置成功。

四 监控

监控配置
前面提到过,Druid具有强大的监控功能,而这也是它的主要功能。出于安全考虑,Druid默认是关闭监控功能的,我们可以在之前的配置基础上追加以下配置来开启监控功能:
在这里插入图片描述
为了系统安全,开启监控功能后配置好白名单和黑名单。配 置 好 以 后 , 重 启 应 用 就 可 以 通 过 这 个 地 址 访 问 监 控 系 统 了 :http://localhost:8080/springboot/druid/index.html

监控系统
登录Druid以后,需要输入我们配置的用户名和密码。
在这里插入图片描述
Druid首页展示的是应用的详细软件信息
在这里插入图片描述
在Druid SQL监控视图中,可以查看SQL的执行情况
在这里插入图片描述
在Druid URL视图中,可以查看每次的请求
在这里插入图片描述
在Druid Spring视图中,可以展示配置的切点执行情况
在这里插入图片描述
打印可执行SQL语句
Druid还有一个非常实用的功能,就是输出可执行SQL语句与SQL语句的执行结果。在默认情况下,打印的SQL语句都是带参数占位符的,例如
在这里插入图片描述
这种形式的SQL语句在排查问题的时候用起来很不方便,简单的SQL语句还好,但是如果其参数很多,想拿过来用是根本不可能的,还不如自己手写的速度快。如果打印出来的SQL语句把参数都设置好了,甚至能将执行结果一起打印出来,那就完美了。Druid就很贴心,为我们提供了这样的功能。具体配置已经在“监控配置”部分给出。我们来看看效果
在这里插入图片描述
可以看到,此时id被设置成了1,最后一行还将我们查询到的数据打印出来了。这个功能真好用!

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

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

相关文章

51单片机智能小车之蓝牙控制并测速小车、wife控制小车、4g控制小车、语音控制小车

目录 1. 蓝牙控制小车 2. 蓝牙控制并测速小车 3. wifi控制测速小车 4. 4g控制小车 5. 语音控制小车 1. 蓝牙控制小车 使用蓝牙模块&#xff0c;串口透传蓝牙模块&#xff0c;又叫做蓝牙串口模块 串口透传技术&#xff1a; 透传即透明传送&#xff0c;是指在数据的传输过…

想了解软件测试生命周期知识吗?

一、软件测试的目的 1.基于不同的立场&#xff0c;存在着两种完全不同的测试目的。 2.从用户的角度出发&#xff0c;普遍希望通过软件测试暴露软件中隐藏的错误和缺陷&#xff0c;以考虑是否可接受该产品。 3.从软件开发者的角度出发&#xff0c;则希望测试成为表明软件产品…

【Python保姆级教程】List容器

文章目录 前言一、列表是什么二、列表的定义2.1 有初始值2.2 空列表使用方括号创建空列表使用list()函数创建空列表 三、list列表常用操作3.1 添加元素3.2 删除元素3.3 修改元素3.4 列表长度 四、遍历操作4.1 使用for循环4.2 使用while循环和索引 总结 前言 Python是一种广泛使…

Python傅立叶变换

1. 什么是傅里叶变换&#xff1f; 在数学中&#xff0c;变换技术用于将函数映射到与其原始函数空间不同的函数空间。傅里叶变换时也是一种变换技术&#xff0c;它可以将函数从时域空间转换到频域空间。例如以音频波为例&#xff0c;傅里叶变换可以根据其音符的音量和频率来表示…

在项目中,关于前端实现数据可视化的技术选择

前言 在项目中&#xff0c;数据可视化以图表、报表类型为主。 需求背景 技术框架是Vue2.x版本&#xff0c;组件库是Ant Design of Vue能够支撑足够多的图表类型开发图表大小/位置能够随意变动图表样式需要支持丰富多样的用户配置强大、开放的图表语法支持复杂的数据可视化场景…

「UG/NX」Block UI 指定平面SpecifyPlane

✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C+&#

linux内核分析:线程和进程创建,内存管理

lec18-19:进程与线程创建 lec20-21虚拟内存管理 内核代码,全局变量这些只有一份,但是内核栈有多份,这可能就是linux线程模型1对1模式的由来。通过栈来做的 x86 CPU支持分段和分页(平坦内存模式)两种 分段,选择子那里就有特权标记了

C#教师考勤管理系统asp.net+sqlserver

3.3.1 员工部分 1&#xff1a;请假管理&#xff1a;包括填写请假条&#xff0c;提交申请&#xff0c;查看审批&#xff0c;审核请假等等。 2&#xff1a;考勤管理&#xff1a;针对具体的员工考勤的统计等管理。 3&#xff1a;个人资料管理&#xff1a;进行个人信息管理&#xf…

接口测试——接口协议抓包分析与mock_L1

目录&#xff1a; 接口测试价值与体系常见的接口协议接口测试用例设计postman基础使用postman实战练习 1.接口测试价值与体系 接口测试概念 接口&#xff1a;不同的系统之间相互连接的部分&#xff0c;是一个传递数据的通道接口测试&#xff1a;检查数据的交换、传递和控制…

每日一博 - WebHook vs Polling

文章目录 概述图解 概述 下面的图表显示了轮询和Webhook之间的比较。 假设我们运行一个电子商务网站。客户通过API网关将订单发送到订单服务&#xff0c;然后订单服务将订单传递给支付服务进行支付交易。支付服务然后与外部支付服务提供商&#xff08;PSP&#xff09;通信&am…

Python 列表的下标索引

视频版教程 Python3零基础7天入门实战视频教程 我们可以通过列表的下标索引获取列表元素。 下标索引从0开始&#xff0c;第一个元素下标索引是0&#xff0c;第二个元素下标索引是1&#xff0c;…第N个元素下标索引是N-1 举例&#xff1a; # 定义一个有多元素的列表 list1 …

数据库系统外部的体系结构

单用户结构主从式结构分布式结构客户机&#xff0f;服务器结构&#xff08;C/S结构&#xff09;浏览器 / 服务器结构&#xff08;B/S结构&#xff09;感谢 &#x1f496; 上一篇文章 数据库系统的三级模式和二级映射介绍的是数据库系统内部的体系结构&#xff0c;是从应用开发…

端口敲击守护程序之DC-9

OSCP系列靶场-Intermediate-DC-9 目录 OSCP系列靶场-Intermediate-DC-9总结准备工作信息收集-端口扫描目标开放端口收集目标端口对应服务探测 信息收集-端口测试80-HTTP端口的信息收集信息收集-网站指纹漏洞利用-网站指纹(无)信息收集-HTML隐藏信息查看信息收集-目录扫描信息收…

C语言 —— 初步入门知识(内存、指针、结构体)

本篇文章将接着上篇继续介绍C语言的基础知识&#xff0c;那么对于C语言大部分初学者会觉得难以理解&#xff0c; 所以作者将指针单独拿出来写篇较短的文章进行讲解。 1.指针 1.1 内存 要学习指针&#xff0c;就先要了解内存。一起来看。 内存是计算机中的关键组成部分&#xff…

机器学习技术(九)——支持向量机算法实操(基于SVM的模型对潜在运营商客户进行分类)

机器学习技术&#xff08;九&#xff09;——支持向量机算法实操 文章目录 机器学习技术&#xff08;九&#xff09;——支持向量机算法实操一、引言二、数据集介绍三、导入相关依赖库四、读取数据五、数据可视化分析1、是否为潜在客户与不同用户主叫时长对比2、是否为潜在合约…

绘图(一)弹球小游戏

AWT编程 语雀 仓库&#xff1a;Java图形化界面: Java图形化界面学习demo与资料 (gitee.com) 很多程序如各种小游戏都需要在窗口中绘制各种图形&#xff0c;除此之外&#xff0c;即使在开发JavaEE项目时&#xff0c; 有 时候也必须"动态"地向客户 端生成各种图形、…

C语言进阶指针(3) ——qsort的实现

大家好&#xff0c;我们今天来学习回调函数qsort的实现。 首先让我们打开cplusplus.com找到qsort函数。 我们看到这个函数就可以看到它的头文件和参数信息。 #include<stdlib.h> void qsort (void* base, size_t num, size_t size, int (*compar)(const void*,const voi…

前后端跨域请求问题解决方法

如图&#xff1a; 1.在config配置包中创建一个CorsConfig配置类 2.将下面代码复制到这个类中即可 import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfigurati…

[字符串和内存函数]strcmp和strncmp以及memcmp的区别

CPlus中对strcmp的介绍 #include <stdio.h> #include <string.h>int main () {char key[] "apple";char buffer[80];do {printf ("Guess my favorite fruit? ");fflush (stdout);scanf ("%79s",buffer);} while (strcmp (key,buf…

MySQL 约束与复杂查询

当涉及到数据库管理系统&#xff08;DBMS&#xff09;的高级主题时&#xff0c;包括数据库的约束、表的设计以及各种类型的查询&#xff0c;特别是聚合查询、联合查询和合并查询&#xff0c;是非常重要的。这些主题可以帮助我们更好地理解数据库的内部工作机制以及如何有效地操…