Alibaba Druid简单介绍及使用

2023-11-14

概要

Alibaba Druid(以下简称 Druid)是阿里巴巴开源的数据库连接池、SQL 解析、监控和扩展功能的工具集合。它不仅仅是一个数据库连接池,还提供了强大的监控和管理功能,可以帮助开发者更好地管理数据库连接、优化SQL查询以及监控数据库性能。

Druid 的主要特点和功能

  • 数据库连接池: Druid 提供高性能的数据库连接池,可以管理和复用数据库连接,减少连接的创建和销毁开销,提高系统性能。
  • 监控: Druid 内置了监控功能,可以通过内置的监控页面查看数据库连接的使用情况、SQL 执行情况、耗时统计等。这对于实时监控数据库的性能和资源使用非常有帮助。
  • 防御 SQL 注入: Druid 提供了 SQL 解析功能,可以识别并防御常见的 SQL 注入攻击,保障系统的安全性。
  • 性能优化: Druid 可以分析 SQL 查询的性能,帮助开发者找出慢查询、高耗时的 SQL 语句,从而进行性能优化。
  • 扩展性: Druid 支持定制插件,开发者可以根据实际需求自定义插件,添加一些额外的功能。
  • 连接池监控和统计: 可以监控活跃连接数、空闲连接数、创建连接数、销毁连接数等连接池的信息,从而更好地管理连接资源。
  • SQL 性能统计: 可以查看每个 SQL 查询的执行时间、执行次数、返回行数等统计信息,帮助开发者定位性能瓶颈。
  • 数据库访问频率统计: 可以统计不同 SQL 的访问频率,帮助开发者了解哪些 SQL 查询被频繁访问。
  • SQL 执行异常监控: 可以监控 SQL 执行过程中的异常情况,帮助开发者及时发现和解决问题。
  • 动态数据源支持: Druid 支持多数据源的动态切换,可以在运行时切换不同的数据源。

Druid 的使用

在项目中使用 Alibaba Druid 需要进行一系列配置和集成步骤。以下是使用 Alibaba Druid 的一般步骤

一、添加依赖

在项目的 Maven 或 Gradle 配置文件中,添加 Alibaba Druid 的依赖。例如,对于 Maven,可以在 pom.xml 文件中添加如下依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.6</version> <!-- 版本 -->
</dependency>

二、配置数据源:

在项目的配置文件(通常是 application.properties 或 application.yml)中配置数据源相关的属性,例如数据库的 URL、用户名、密码等。这些属性会被自动注入到 Druid 数据源中。以下是一个简单的示例

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: myuser
    password: mypassword
    driver-class-name: com.mysql.cj.jdbc.Driver

三、配置 Druid 监控和过滤器

创建一个 Spring 配置类,用于配置 Druid 的监控页面和过滤器。这个配置类会创建一些 Bean,分别用于设置监控页面访问路径、用户名密码、过滤器规则等

package com.example.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;

@Configuration
public class DruidConfig {

    // 配置数据源,将数据源配置属性绑定到 DruidDataSource Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DruidDataSource druidDataSource() {
        return new DruidDataSource();
    }

    // 配置 Druid 监控的 Servlet
    @Bean
    public ServletRegistrationBean<StatViewServlet> statViewServlet() {
        ServletRegistrationBean<StatViewServlet> servletRegistrationBean =
                new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");

        // 设置监控页面的配置参数
        servletRegistrationBean.addInitParameter("allow", "127.0.0.1"); // 允许访问的 IP
        servletRegistrationBean.addInitParameter("deny", "127.0.0.2"); // 拒绝访问的 IP
        servletRegistrationBean.addInitParameter("loginUsername", "admin"); // 登录用户名
        servletRegistrationBean.addInitParameter("loginPassword", "password"); // 登录密码
        servletRegistrationBean.addInitParameter("resetEnable", "false"); // 是否允许重置数据

        return servletRegistrationBean;
    }

    // 配置 Druid 过滤器
    @Bean
    public FilterRegistrationBean<WebStatFilter> statFilter() {
        FilterRegistrationBean<WebStatFilter> filterRegistrationBean =
                new FilterRegistrationBean<>(new WebStatFilter());

        // 配置过滤规则
        filterRegistrationBean.addUrlPatterns("/*");
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");

        return filterRegistrationBean;
    }
}

使用这个配置类,可以将 Alibaba Druid 集成到你的项目中,实现数据库连接池的管理和监控功能。请根据您的项目需要进行适当的修改和配置

四、启动应用程序

当应用程序启动时,Spring Boot 会自动初始化配置的数据源和 Druid 监控功能

五、访问监控页面

打开浏览器,访问配置的 Druid 监控页面路径,例如 http://localhost:8080/druid,端口号根据自己的配置,默认为8080,输入配置的登录用户名和密码即可进入监控页面

druid监控界面

小结

需要注意的是,以上步骤是一个简单的示例。实际使用中,你可能还需要根据项目的需要进行更详细的配置,例如连接池大小、连接池参数、监控页面的安全性配置等。

另外,如果你的项目使用 Spring Boot,那么使用 Alibaba Druid Starter 可以大大简化集成过程,因为 Spring Boot 提供了许多自动配置功能,可以自动根据配置文件中的属性进行初始化。

常见问题请参考 Alibaba Druid 官方文档

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Alibaba Druid简单介绍及使用 的相关文章

  • Spring JDBC 模板。如何获取pl/sql脚本的结果变量

    我正在使用 NamedParameterJdbcTemplate 来运行 pl sql 脚本 但我不知道如何获取out变量的值 id out 提前致谢 String script declare begin if myFunc id in
  • Java Swing 应用程序消息对话框帮助

    我正在开发 Java Swing 应用程序 我需要创建一个如图所示的对话框 我不知道这个的名字 我无法解释 所以我附上一张照片 请告诉我这叫什么以及如何在我的 GUI 应用程序中创建它 给猫剥皮的方法不止一种 public final cl
  • Java EE 6 和单例

    谁能解释一下在 Java EE 6 应用程序中实现 Singleton 的完整过程 我假设我不应该以声明静态变量的典型方式创建单例 而应该使用 Singleton注解 我必须这样做吗 难道只是声明一下的情况 Singleton就是这样 我还
  • 使用 JavaScript 与 Web 服务器通信的 Applet 是否可以迁移到 JWS?

    只是分享一些信息 希望对社区有用 由于各种浏览器停止支持插件 Applet 的可用性已经下降 Google 已决定停止对 NPAPI 插件的支持 EDGE 不支持插件 Firefox 也不鼓励使用插件 Mozilla 可能会跟进该套件 我们
  • Java:while循环冻结程序

    我正在制作一个游戏 我需要每 3 秒更新一次 JProgressBar 为此 我使用 while 循环 问题是我的程序由于 while 循环而冻结 我在其他问题中读到它 他们没有帮助我解决这个问题 我不知道如何解决 这是我的代码 publi
  • 如何将完整的日期格式拆分为日期和时间?

    我有很多格式为我的示例所示的字符串 我必须解析它们 我正在尝试确定今天是哪根弦 我的问题是 时间快到了 我只需要比较那个日期 接下来我想检查时间是否在 after 和 before 的两个时间戳 HH mm ss 之间 但存在问题 日期几乎
  • Grails 项目 - Servlet 调用 - ClassNotFoundException:javax.servlet.AsyncContext

    我在用 IntelliJ IDEA 终极版 12 4 grails 2 2 0 BuildConfig groovy 文件中的 grails servlet version 2 5 并实现了简单的 servlet post 请求 使用 RE
  • Glassfish 4 - JDBC 领域

    Glassfish 4 中的密码加密算法和摘要算法有什么区别 因为Password加密算法不能为空 所以我使用了MD5 Encoding使用了Hex 摘要算法为空 因此默认为 SHA 256 但是 如果我使用 JAAS 制作一个简单的登录应
  • Android:TelephonyManager 类

    我不明白为什么 API 文档中这么写TelephonyManager类是public 但是当我尝试创建一个实例时 它说它不是公共类 并且无法从包中访问 我看到它也说使用Context getSystemService Context TEL
  • JTree ConvertValueToText 返回在更改时被截断

    我有一个自定义树实现convertValueToText 此实现取决于某些全局状态 如果返回的字符串比先前返回的字符串更长 实际上我认为更宽 因为以像素为单位触发它 则文本将被截断并用 填充 当重绘是由 取消 选择元素或某个元素引起时 情况
  • java.lang.ClassNotFoundException: org.jboss.logging.Logger

    我有一个奇怪的问题 我有一个JMS https en wiktionary org wiki JMS客户端应用程序和MDB https en wikipedia org wiki Enterprise JavaBeans Message d
  • Java ArrayList 和 HashMap 动态

    有人可以提供一个创建Java的例子吗ArrayList and HashMap在飞行中 所以而不是做一个add or put 实际上在类实例化时为数组 哈希提供种子数据 举个例子 类似于 PHP 的例子 array array 3 1 2
  • JavaFX Integer Spinner (IntegerSpinnerValueFactory) 不会将值回绕到最小值

    我创建了一个带有值的整数微调器 min 5 max 15 and initialValue 12 and wrapAround true 一旦旋转器到达max 15 增量期间的值 而不是将值重置为min 5 正如它所说文档 https op
  • gwt 文本框添加更改处理程序

    我有一个从设计师那里收到的文本框 但是我在 GWT 中编写了操作 问题是文本框为空 但是当通过按下按钮用值填充文本框时 将显示警报框 通知值已更改 但没有成功 帮助我 TextBox zip1 null function onModuleL
  • 带等待/通知的同步块与不带等待/通知的同步块之间的区别?

    如果我只是使用synchronized 不是wait notify方法 它仍然是线程安全的吗 有什么不同 Using synchronized使方法 块一次只能由一个线程访问 所以 是的 它是线程安全的 这两个概念是结合在一起的 而不是相互
  • “强制更新快照/版本” - 这是什么意思

    在 Maven 项目中 选择 更新项目 时 有一个名为 强制更新快照 版本 的选项 它有什么作用 强制更新快照 版本 就像运行以下命令 mvn U install U 也可以用作 update snapshot 看here http boo
  • Eclipse 如何创建一个未解决编译问题的类?

    当我尝试使用 javac 编译此类时 出现编译错误并且未创建 Test class public class Test public static void main String args int x 1L lt this cannot
  • 空检查时可能未初始化错误

    我正在检查变量是否已初始化 但此时 netbeans 给了我variable reader might not have been initialized警告 我该如何解决 抑制这个问题 这是我的代码 摘要 final Reader rea
  • 需要在没有wsdl的情况下调用soap ws

    我是网络服务的新手 这个网络服务是由 siebel 提供的 我需要调用一项网络服务 我的客户向我提供了以下详细信息 这是 SOAP 对于产品 请使用它作为端点 Request
  • removeall 和removeif 的用例

    我找到了这个 fun main val list MutableList

随机推荐

  • mmclassification安装与调试

    MMClassification 是一款基于 PyTorch 的开源图像分类工具箱 是 OpenMMLab 项目的成员之一 主分支代码目前支持 PyTorch 1 5 以上的版本 MMClassification包含了诸多经典或高性能图像分
  • c语言开发题库管理系统,C语言程序设计_题库管理系统-20210412073914.docx-原创力文档...

    程序设计基础课程设计报告 班 级 计算机科学与技术 1103 班 姓 名 杨广宇 指导教师 胡宏涛 完成日期 2012年9 月6日 题目 1 设计题目与要求 简要介绍课程设计题目内容与要求 1 设计内容 要求输入试题 仅限选择题和填空题 基
  • Android 隐藏导航栏

    隐藏导航栏 public void hideNav Window window getWindow window getDecorView setSystemUiVisibility View SYSTEM UI FLAG LAYOUT S
  • 计算机组成原理一些要背的内容

    cceed1ab 77ed 43f0 8629 aea9e3391770 1 1冯诺依曼的存储程序的计算机设计基本思想如下 用二进制形式表示数据和指令 指令由操作码和地址码组成 采用存储程序 即把编写好的程序和原始数据预先放入计算机主存储器
  • css中::before ::after的用法

    一 介绍 before和 after是伪元素 css3中为了与伪类做区别 伪元素采用双冒号的写法 但因为兼容性的问题 所以现在大部分还是统一的单冒号 比如 first line first letter before after等 但新的在
  • 算法的时间复杂度、空间复杂度

    文章目录 数据结构 算法 数据结构与算法的关系 时间复杂度 O 1 O n O 1 O n O n O n 2 O log2 n 空间复杂度 O 1 O n O n 2 常用算法的时间 空间复杂度 数据结构 数据结构是计算机存储 组织数据的
  • Spring Colud Alibaba

    一 SpringColudAlibaba Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案 此项目包含开发分布式应用微服务的必需组件 方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布
  • SHA256WithRSA

    在上文中了解到SHA和RSA 工作中恰好用到扩展应用 SHA256WithRSA 本文总结下学习过程 备忘 再提供另外一种方法 实现Java版pem密钥和 Net版xml密钥相互转换的方法 密钥转换 准备 引入BouncyCastle Cr
  • java类添加属性_Java 类动态添加属性字段的操作

    说明 做项目中遇到一种场景 需要根据查询时间段 获取时间段中中每个月份对应的金额 费用统计 如截图中的两列 因为列是动态的 首先想到的就是后天拼接json格式字符串 然后返回到前台 组装表头及内容 但是当前系统中easyui版本为1 2 并
  • 【华为OD机试】需要打开多少监控器(C++ Python Java)2023 B卷

    时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 语言限定 C clang11 C clang 11 Pascal fpc 3 0 2 Java jav
  • 海思芯片部署MPP并验证功能

    1 前期准备 1 1搭建好开发环境 1 这里说的是以个人电脑进行开发 安装好虚拟机 在虚拟机中搭建好nfs服务器 确保开发板可以挂载上虚拟机 2 确保开发板和PC可以通过串口通信 1 2熟悉海思芯片的SDK开发包 1 SDK开发包里有mpp
  • 安全开发-PHP应用&留言板功能&超全局变量&数据库操作&第三方插件引用&后台模块&Session&Cookie&Token&身份验证&唯一性

    文章目录 开发环境 数据导入 mysql架构 库表列 数据库操作 mysqli函数 增删改查 数据接收输出 html混编 超全局变量 第三方插件引用 js传参 函数对象调用 身份验证 Cookie使用 身份验证 Session使用 唯一性判
  • 如何提高会员管理系统的使用效率

    在现代商业竞争激烈的环境下 会员管理系统成为许多企业提升用户体验 加强客户关系的关键工具 然而 要充分发挥会员管理系统的作用 提高其使用效率至关重要 本文将探讨如何有效地提升会员管理系统的使用效率 从而实现更好的业务成果 1 精准的系统定位
  • 如何理解区块链的运行原理?

    如何理解区块链的运行原理 上文 我们介绍了区块链的概念 今天就稍微深入一下 尽可能通俗地介绍一下 区块链的运行原理 通过上文的小故事 我们知道了区块链的概念 它的本质就是解决信任问题 降低信任成本的技术方案 目的就是为了去中心化 去信用中介
  • EasyUI Accordion 折叠面板默认不展示

    最近使用easyui做一套后台管理系统 左侧菜单使用的是Accordion折叠面板 需求是打开页面默认不展示子菜单 在网上找了一些博客 大多数都是说把 jquery easyui min js 中第多少行给注释了 我没有找到相应的代码 我使
  • Figma插件开发

    目的 介绍 Figma 插件 figma 插件开发从 0 到 1 分享自己开发的想法 一 Figma 是什么 figma 插件是什么 Figma 初印象 figma 是一个 基于浏览器 的协作式 UI 设计工具 figma 插件初印象 加强
  • 【解决方法】INF file txtsetup.sif is corrupt or missing

    今天帮别人装一个系统 一个上网本 先描述一下环境 上网本 没有光驱 只有一个分区 C 使用UltraISO制作的启动盘 所以 只能用U盘安装 或者说我只会 可是做好了启动盘之后安装确出现上面的问题 解决方法 使用WinSetupFromUS
  • kali下微信的使用dochat(盒装微信)

    一 dochat是什么 DoChat 盒装微信 是docker封装好的微信客户端 WeChat PC Windows Client for Linux 主要解决在linux下使用微信的问题 二 安装方法 官方介绍 GitHub huan d
  • 2023-9-14 石子合并

    题目链接 石子合并 include
  • Alibaba Druid简单介绍及使用

    文章目录 概要 Druid 的主要特点和功能 Druid 的使用 一 添加依赖 二 配置数据源 三 配置 Druid 监控和过滤器 四 启动应用程序 五 访问监控页面 小结 概要 Alibaba Druid 以下简称 Druid 是阿里巴巴