Druid

article/2025/9/13 3:00:10

Druid

Druid是一个高效的数据查询系统,主要解决的是对于大量的基于时序的数据进行聚合查询。数据可以实时摄入,进入到Druid后立即可查,同时数据是几乎是不可变。通常是基于时序的事实事件,事实发生后进入Druid,外部系统就可以对该事实进行查询。

Java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池。

Druid 是阿里巴巴开源平台上一个数据库连接池实现,结合了 C3P0、DBCP 等 DB 池的优点,同时加入了日志监控。

Druid 可以很好的监控 DB 池连接和 SQL 的执行情况,天生就是针对监控而生的 DB 连接池。

基本配置参数

配置数据源

1、添加上 Druid 数据源依赖。

<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>    <groupId>com.alibaba</groupId>   <artifactId>druid</artifactId>    <version>1.1.21</version>
</dependency>

2、切换数据源;之前已经说过 Spring Boot 2.0 以上默认使用 com.zaxxer.hikari.HikariDataSource 数据源,但可以 通过 spring.datasource.type 指定数据源。

spring:datasource:username: rootpassword: 123456url: jdbc:mysql://localhost:3306/springboot?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8driver-class-name: com.mysql.cj.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSource # 自定义数据源

3、数据源切换之后,在测试类中注入 DataSource,然后获取到它,输出一看便知是否成功切换;

img

4、切换成功!既然切换成功,就可以设置数据源连接初始化大小、最大连接数、等待时间、最小连接数 等设置项;可以查看源码

spring:datasource:username: rootpassword: 123456#?serverTimezone=UTC解决时区的报错url: jdbc:mysql://localhost:3306/springboot?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8driver-class-name: com.mysql.cj.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSource#Spring Boot 默认是不注入这些属性值的,需要自己绑定#druid 数据源专有配置initialSize: 5minIdle: 5maxActive: 20maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: true#配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入#如果允许时报错  java.lang.ClassNotFoundException: org.apache.log4j.Priority#则导入 log4j 依赖即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4jfilters: stat,wall,log4jmaxPoolPreparedStatementPerConnectionSize: 20useGlobalDataSourceStat: trueconnectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

5、导入Log4j 的依赖

<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>    <groupId>log4j</groupId><artifactId>log4j</artifactId>    <version>1.2.17</version>
</dependency>

6、现在需要程序员自己为 DruidDataSource 绑定全局配置文件中的参数,再添加到容器中,而不再使用 Spring Boot 的自动生成了;我们需要 自己添加 DruidDataSource 组件到容器中,并绑定属性;(config)

package com.kuang.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;@Configuration
public class DruidConfig {/*将自定义的 Druid数据源添加到容器中,不再让 Spring Boot 自动创建绑定全局配置文件中的 druid 数据源属性到 com.alibaba.druid.pool.DruidDataSource从而让它们生效@ConfigurationProperties(prefix = "spring.datasource"):作用就是将 全局配置文件中前缀为 spring.datasource的属性值注入到 com.alibaba.druid.pool.DruidDataSource 的同名参数中*/@ConfigurationProperties(prefix = "spring.datasource")@Beanpublic DataSource druidDataSource() {return new DruidDataSource();}}

7.测试

@SpringBootTestclass 
SpringbootDataJdbcApplicationTests {//DI注入数据源    @Autowired    DataSource dataSource;@Test    public void contextLoads() throws SQLException {        //看一下默认数据源        System.out.println(dataSource.getClass());        //获得连接        Connection connection =   dataSource.getConnection();        System.out.println(connection);DruidDataSource druidDataSource = (DruidDataSource) dataSource;        System.out.println("druidDataSource 数据源最大连接数:" + druidDataSource.getMaxActive());        System.out.println("druidDataSource 数据源初始化连接数:" + druidDataSource.getInitialSize());//关闭连接        connection.close();    }
}

配置Druid数据源监控

Druid 数据源具有监控的功能,并提供了一个 web 界面方便用户查看,类似安装 路由器 时,人家也提供了一个默认的 web 页面。

所以第一步需要设置 Druid 的后台管理页面,比如 登录账号、密码 等;配置后台管理;

//配置 Druid 监控管理后台的Servlet;
//内置 Servlet 容器时没有web.xml文件,所以使用 Spring Boot 的注册 Servlet 方式@Beanpublic 
ServletRegistrationBean statViewServlet() {   ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");// 这些参数可以在 com.alibaba.druid.support.http.StatViewServlet     // 的父类 com.alibaba.druid.support.http.ResourceServlet 中找到    Map<String, String> initParams = new HashMap<>();    initParams.put("loginUsername", "admin"); //后台管理界面的登录账号(固定参数)    initParams.put("loginPassword", "123456"); //后台管理界面的登录密码(固定参数)//后台允许谁可以访问    //initParams.put("allow", "localhost"):表示只有本机可以访问    //initParams.put("allow", ""):为空或者为null时,表示允许所有访问    initParams.put("allow", "");    //deny:Druid 后台拒绝谁访问    //initParams.put("kuangshen", "192.168.1.20");表示禁止此ip访问//设置初始化参数    bean.setInitParameters(initParams);    return bean;}

配置完毕后,我们可以选择访问 :http://localhost:8080/druid/login.html

配置 Druid web 监控 filter 过滤器

//配置 Druid 监控 之  web 监控的 filter
//WebStatFilter:用于配置Web和Druid数据源之间的管理关联监控统计
@Beanpublic FilterRegistrationBean webStatFilter() {    FilterRegistrationBean bean = new FilterRegistrationBean();    bean.setFilter(new WebStatFilter());//exclusions:设置哪些请求进行过滤排除掉,从而不进行统计    Map<String, String> initParams = new HashMap<>();    initParams.put("exclusions", "*.js,*.css,/druid/*,/jdbc/*");    bean.setInitParameters(initParams);//"/*" 表示过滤所有请求    bean.setUrlPatterns(Arrays.asList("/*"));    return bean;
}

nitParams.put(“exclusions”, “.js,.css,/druid/,/jdbc/”);
bean.setInitParameters(initParams);
//“/" 表示过滤所有请求
bean.setUrlPatterns(Arrays.asList("/
”));
return bean;
}



http://chatgpt.dhexx.cn/article/VsYwoYW8.shtml

相关文章

QUuid

一、描述 Quuid 类存储一个通用唯一标识符 (UUID)。 UUID 是由某种算法生成的 16 字节&#xff08;128 位&#xff09;数字&#xff0c;旨在保证 UUID 在使用它的分布式计算环境中是唯一的。 二、类型成员 1、enum QUuid::StringFormat&#xff1a;此枚举来控制字符串表示的…

解决cuid卡写数据后,无法读取。以及救卡方法

最近入手了几张cuid卡&#xff0c;用来复制校园卡的。但在写数据的时候发现的一系列问题。下面说一下我的解决方法。链接在评论区。 设备&#xff1a;pn532,手机 软件&#xff1a;上位机&#xff0c;M1T&#xff0c;以及手机上的mifare classic tool 由于我的校园卡是cpu卡s…

IC卡卡号修改软件,UID卡CUID卡物理卡号修改软件操作演示

普通IC卡的卡号是唯一的&#xff0c;也是锁死的&#xff0c;无法修改&#xff0c;而UID卡和CUID卡的物理卡号是可以修改的&#xff0c;一些考勤等用户需要修改卡片的卡号。 一般考勤等使用的卡号是10进制的&#xff0c;软件支持写入10进制卡号和16进制卡号&#xff0c;软件如下…

手机NFC模拟M1门禁卡、写CUID白卡的一些研究记录

一、需求场景 近来小区安装了智能门禁,但只配发了一张门禁卡,不方便使用,于是产生了用手机模拟门禁卡,或者复制一张门禁卡的想法。 本文使用的软件:(CSDN无法修改下载积分了。。。) 包括手机NFC读写卡神器Mifare Classic Tool(MCT)2.2.5最新版、手机读卡工具NFC TagI…

小米nfc模拟加密门禁卡详细图文教程(实测可用)----------------- IC ID CUID卡区别

IC ID CUID 卡区别如下&#xff1a; ID卡全称身份识别卡&#xff0c;是一种不可写入的感应卡&#xff0c;含固定的编号。频率是125KHz&#xff0c;属于低频。一般用于门禁。 IC卡全称集成电路卡&#xff0c;又称智能卡。可读写&#xff0c;容量大&#xff0c;有加密功能&#…

IC卡物理卡号修改,UID卡、CUID卡、FUID卡物理卡号修改

简介&#xff1a; 普通M1卡的物理卡号是锁死的&#xff0c;UID卡、CUID卡、FUID卡是特殊的M1卡&#xff0c;他们的物理卡号是可以修改的。一些用户如考勤卡&#xff0c;考勤机读取的是物理卡号转换成10进制后的卡号&#xff0c;那是随机产生的&#xff0c;没有规律&#xff0c;…

UID卡、CUID卡、FUID卡的区别

UID卡(国外称GEN1) 所有区块可被重复读写 卡片ID可改且使用后门指令更改ID ID可被重复修改 响应后门指令(意味着可被使用后门指令检测是否为克隆卡的机器发现) CUID卡(国外称GEN2) 所有区块可被重复读写 卡片ID可改且使用普通写指令更改ID ID可被重复修改 不响应后门指令(意…

复制CUID卡写卡写死原因

手机必须支持NFC&#xff0c;下载MifareClassicTool 官网主页&#xff1a; GitHub - ikarus23/MifareClassicTool: An Android NFC app for reading, writing, analyzing, etc. MIFARE Classic RFID tags. 或从这里下载 https://download.csdn.net/download/yfx000/8750246…

UUID介绍

UUID Universally Unique Identifier&#xff1a;通用唯一识别码 使用某种规则&#xff0c;不是某种中心化的自增方式&#xff0c;来保证这个识别码的全局唯一性 生成规则&#xff1a; RFC4122来进行定义。 根据生日悖论&#xff0c;若每秒产生 10 亿笔 UUID&#xff0c;100 年…

UID卡、IC卡、ID卡、CUID 卡、FUID 卡、UFUID 卡 有什么区别?

生活中&#xff0c;我们经常用到门禁卡、考勤卡、电梯卡还有停车卡&#xff0c;这些功能是怎么实现的呢&#xff1f;这是靠卡里封装的芯片和线圈来实现各种功能&#xff0c;不同的芯片频率、容量、读写性各不相同&#xff0c;常见的是IC卡还有ID卡。还有一种叫UID的卡&#xff…

M1卡/CUID卡格式化清卡操作方法

CUID卡是一种可以更改0扇区0块的特殊卡&#xff0c;很多朋友发现CUID卡写入一次之后再写就不让写了&#xff0c;认为卡已经废了&#xff0c;其实可以格式化清卡以后变空白卡&#xff0c;再次使用。普通M1卡也可以用该方法清卡&#xff0c;把卡片恢复成空白卡。 一、把CUID卡放读…

机器学习sklearn之SVM推导(三)

针对线性不可分问题&#xff0c;SVM引入了核函数方法&#xff0c;将低维空间的线性不可分问题映射到高维空间&#xff0c;使其变得线性可分。 注意&#xff1a;核函数和映射函数没有关系&#xff0c;只是用来计算计算映射到高维空间之后的内积的一种简便方法。 后面又刷了一遍西…

SVM的基本推导

1、SVM的作用 对于给定的训练样本集D{(x1,y1), (x2,y2),… (xn,yn)}&#xff0c;yi属于{-1&#xff0c;1}&#xff0c;希望能找出一个超平面&#xff0c;把不同类别的数据集分开&#xff0c;对于线性可分的数据集来说&#xff0c;这样的超平面有无穷多个&#xff0c;而最优的超…

SVM原理及推导过程

SVM简介 SVM核心是最优化方法&#xff08;带约束条件&#xff0c;拉格朗日乘子法&#xff09;&#xff0c;思想是max&#xff08;min&#xff09;&#xff0c;即最大化最小间隔&#xff08;找到最小间隔的点&#xff0c;即支持向量&#xff09;&#xff0c;目标就是求解参数al…

SVM的详细推导

SVM推导&#xff1a; 参考 http://wenku.baidu.com/view/dd807d2fcfc789eb172dc883.html http://wenku.baidu.com/link?urlIJ1D1XtdoQM7qD3JdOE3eBPmN0rJqGDIEmZCG_bWQR8q34ZtT7YqsFtbwHV1RVxCjpt2KgZlqzD-LeOSVNZmO9MQN4YbMZ3eMTHpprQQal7

SVM推导过程注解(一)

前言 支持向量机(Support Vector Machine)的原理其实比较简单&#xff0c;它是基于结构风险最小化理论之上在特征空间中建构最优分割超平面。在二维中就是线&#xff0c;在三维中就是面&#xff0c;但我们统称为超平面。 就我所看到的相关书本、论文以及网上博文情况来看&…

AI面试之SVM推导

SVM现在主流的有两个方法。一个是传统的推导&#xff0c;计算支持向量求解的方法&#xff0c;一个是近几年兴起的梯度下降的方法。 梯度下降方法的核心是使用了hinge loss作为损失函数&#xff0c;所以最近也有人提出的深度SVM其实就是使用hinge loss的神经网络。 本文的目的是…

CS229 SVM 推导和使用心得

这两天要用到SVR的几何解释,特地又翻了CS229 lecture3的笔记。特此记录一下我理解的思路。 从logistic regression引入,说明我们应该更关注于离separating hyperplane近的点,进而引入了margin的概念。 我们想让margin尽量的大,但最直接的functional margin可以通过缩放ω和…