Springboot 集成Druid

2023-11-06

Springboot 集成Druid

Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。本篇主要讲解一下 Springboot中如何集成 Druid !

image-20220722091607865

1.添加Druid依赖 

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

有不少教程建议的依赖是

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.8</version>
</dependency>

其实Druid和Springboot官方已经提供了很好的集成,虽然二者都可以使用,但是druid-spring-boot-starter不需要编写配置类,简化了配置。 

2.添加配置application.yaml

spring:
  datasource:
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai
    type: com.alibaba.druid.pool.DruidDataSource
    # 数据源连接池配置
    druid:
      #   数据源其他配置
      initialSize: 5
      minIdle: 5
      maxActive: 20
      maxWait: 60000
      timeBetweenEvictionRunsMillis: 60000
      minEvictableIdleTimeMillis: 300000
      validationQuery: SELECT 1 FROM DUAL
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      poolPreparedStatements: true
      maxPoolPreparedStatementPerConnectionSize: 20
      useGlobalDataSourceStat: true
      connectionProperties: druid.stat.mergeSql=true;druid.stat.logSlowSql=true;druid.stat.slowSqlMillis=1000;
      # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
      filters: stat,wall,slf4j

      #配置监控属性: 在druid-starter的: com.alibaba.druid.spring.boot.autoconfigure.stat包下进行的逻辑配置
      # WebStatFilter配置,
      web-stat-filter:
        #默认为false,表示不使用WebStatFilter配置,就是属性名去短线
        enabled: true
        #拦截该项目下的一切请求
        url-pattern: /*
        #对这些请求放行
        exclusions: /druid/*,*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico
        session-stat-enable: true
        principal-session-name: session_name
        principal-cookie-name: cookie_name
      # StatViewServlet配置
      stat-view-servlet:
        #默认为false,表示不使用StatViewServlet配置,就是属性名去短线
        enabled: true
        #配置DruidStatViewServlet的访问地址。后台监控页面的访问地址
        url-pattern: /druid/*
        #禁用HTML页面上的“重置”功能,会把所有监控的数据全部清空,一般不使用
        reset-enable: false
        #监控页面登录的用户名
        login-username: admin
        #监控页面登录的密码
        login-password: 123456
        #白名单
        allow:
        #黑名单
        deny:
      #Spring监控配置,说明请参考Druid Github Wiki,配置_Druid和Spring关联监控配置
      aop-patterns: com.zzp.*

 有几个地方需要注意下:

  • 想要在日志中输出慢日志除了配置connectionProperties,还需要在filters属性中加入项目使用的日志框架如log4j或者slf4j,并引入对应依赖,否则日志中不会输出慢sql日志;
  • 如果需要Spring监控,除了配置aop-patterns,还需要加入spring-boot-starter-aop依赖,否则Spring监控页面空白。

3.查看监控页面

访问http://ip:port/druid/login.html,输入账号密码,如果数据源页面各项参数和配置的参数一样,则说明集成成功。

image.png

调用接口,查看SQL监控和Spring监控页面是否正常显示。 

4.去除广告

监控页面下方有阿里云的广告,可以通过代码去除。 

import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties;
import com.alibaba.druid.util.Utils;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.servlet.*;
import java.io.IOException;

/**
 * Druid广告配置
 *
 * @author zzp
 */
@Configuration
@ConditionalOnWebApplication
@AutoConfigureAfter(DruidDataSourceAutoConfigure.class)
@ConditionalOnProperty(
        name = "spring.datasource.druid.stat-view-servlet.enabled",
        havingValue = "true",
        matchIfMissing = true)
public class DruidAdConfig {

    /**
     * 去除监控页面底部广告
     *
     * @param properties
     * @return org.springframework.boot.web.servlet.FilterRegistrationBean
     */
    @Bean
    public FilterRegistrationBean removeDruidAdFilterRegistrationBean(
            DruidStatProperties properties) {
        // 获取web监控页面的参数
        DruidStatProperties.StatViewServlet config = properties.getStatViewServlet();
        // 提取common.js的配置路径
        String pattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*";
        String commonJsPattern = pattern.replaceAll("\\*", "js/common.js");

        final String filePath = "support/http/resources/js/common.js";

        // 创建filter进行过滤
        Filter filter =
                new Filter() {
                    @Override
                    public void init(FilterConfig filterConfig) throws ServletException {}

                    @Override
                    public void doFilter(
                            ServletRequest request, ServletResponse response, FilterChain chain)
                            throws IOException, ServletException {
                        chain.doFilter(request, response);
                        // 重置缓冲区,响应头不会被重置
                        response.resetBuffer();
                        // 获取common.js
                        String text = Utils.readFromResource(filePath);
                        // 正则替换banner, 除去底部的广告信息
                        text = text.replaceAll("<a.*?banner\"></a><br/>", "");
                        text = text.replaceAll("powered.*?shrek.wang</a>", "");
                        response.getWriter().write(text);
                    }

                    @Override
                    public void destroy() {}
                };
        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        registrationBean.setFilter(filter);
        registrationBean.addUrlPatterns(commonJsPattern);
        return registrationBean;
    }
}

完结! 

 

 

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

Springboot 集成Druid 的相关文章

随机推荐

  • 推荐几个可以写到简历上的Go方向优质开源项目(需花点心思研究)

    前言 哈喽 大家好 我是asong 最近总有读者问我有没有Go语言方向优质的开源项目 可以写在简历上那种 一时还真想不起来 花了两天时间调研了一下 针对有无工作经验的分别推荐几个开源项目 下面我们一起来看一下 无工作经验 对于还在上学的朋友
  • java中怎么从一个数组中截取一定长度的元素放到新数组中

    可以直接用Arrays的静态方法copyOfRange int original int from int to 下面是一个简单的演示程序 1 2 3 4 5 6 7 8 9 10
  • mysql Navicat12约束条件的设置和详解

    文章目录 一 什么是mysql约束条件 1 1 说明 1 2 约束的分类 二 Navicat对应约束的设置位置 2 1 not null 非空约束 primary key 主建约束 default 默认约束 2 2 unique 唯一 2
  • OpenBSD 加速 下载安装

    OpenBSD 安装后需要安装其它软件时候 发现它要自动下载源文件 要不就手动下载 反正就是慢 我发现有个方法可以加快自动安装时候的下载 su root cat gt gt etc mk conf DISTDIR usr files dis
  • 字符串一次编辑

    一次编辑 字符串有三种编辑操作 插入一个字符 删除一个字符或者替换一个字符 给定两个字符串 编写一个函数判定它们是否只需要一次 或者零次 编辑 作者 LeetCode Solution 链接 https leetcode cn proble
  • linux搭建ftp

    ftp一些概念了解 Linux安装vsftpd及配置详解 1 安装 yum y install vsftpd 2 FTP主动模式与FTP被动模式 3 防火墙开启21端口 文中是使用iptables开启的 现在centos7 2版本默认是防火
  • 对el-form-item中的子组件进行必填验证(方法)

    效果图 思路 在el form item中添加show message属性 每次修改子组件值时 对其进行判断修改 部分代码
  • 光通量,光强,亮度,照度

    1 光通量 F 单位时间通过的光量 单位 流明 lm 2 发光强度 光强 I 单位立体角的光通量 I F 单位 坎德拉 cd 3 亮度 L 单位面积光强 L I S sin 单位 坎德拉 平米 cd 4 照度 E 单位面积接受的光通量 E
  • 固定分区存储空间的分配和回收Java代码实现

    目录 一 实验要求 二 实验目的 三 源代码 四 实验结果 五 实验总结 一 实验要求 实现固定分区存储管理方式下存储空间的分配和回收 已知当前内存分配表如下 分区号 起始地址 长度 状态 1 10KB 30KB Job5 2 40KB 7
  • 已知一个整数,如何判断这个整数是无符号的?

    前言 记录6月11日 肯哥在群里面分享的一个问题 说实话 看到题目想了半天没明白 一看答案 才发现 这题真的简单 题目 已知一个整数 如何判断这个整数是无符号的 题解 1 因为我的思路完全是错误的 我就不再此进行乱分析了 肯哥给出的提示是
  • 多维时序

    多维时序 MATLAB实现基于贝叶斯线性回归 Bayesian Regression 的多变量输入回归预测 目录 多维时序 MATLAB实现基于贝叶斯线性回归 Bayesian Regression 的多变量输入回归预测 预测效果 基本介绍
  • harbor 中 使用 push 上传镜像时候 显示 没有认证

    harbor 中 使用 upload 上传镜像时候 显示 没有认证 概述 VMware harbor 安装完成后 使用docker tag 打新的标签 然后 用docker push上传镜像的时候 显示 安全方面的错误 1 客户端显示信息
  • 数据结构知识点总结

    说明 1 本文档为作者考研准备数据结构时期所作笔记 所用资料为王道视频 2 文中少部分内容来源 王道数据结构笔记 3 文中部分图片 文字内容来源于互联网 4 文中一些示例图片由作者绘制 出现错误难以避免 如发现错误 欢迎指出 5 根据网友的
  • 在VREP的模型脚本中使用其他脚本的函数

    VREP是一款用于机器人仿真的软件 最近博主也正在使用此款软件完成机器人工控课程设计 VREP使用的是Lua语言编程的 Lua语言是嵌入式语言 十分方便简单 有C C 语言基础很容易上手 此次工控设计是关于youbot小车在迷宫中寻找随机生
  • 共识算法比较:Tendermint的BFT与EOS的dPoS

    这项技术深入研究由Chjango Unchained编写 本文比较了不同的共识系统 它们为EOS和Tendermint提供了关于每种基础技术以及它们有什么样的独特地类似证明 PoS 能力 在由单个组织运行的传统分布式系统中 信任和安全由防火
  • Windows下安装使用SVN

    Windows下安装使用SVN https www cnblogs com sns007 p 5769393 html
  • Git 学习(二)—— 工作区 — 本地仓库的操作命令

    我们要上传文件到本地仓库 不是直接拷贝进去的 而是需要通过命令一步步上传 从工作区到本地仓库分为了三步 也可以说是三个区域 目录 1 操作命令 1 git init 获取本地仓库 2 git add 工作区 暂存区 3 git commit
  • 关于distcc安装和使用

    distcc a fast free distributed C C compiler NEWS distcc 3 1 released Distcc release 3 1 is now available at Downloads Se
  • java 是怎么在中删除下拉列表_删除在一个下拉列表字段中选择的选项,并且不显示在该行中存在的其他下拉列表中不工作-jquery...

    我有一个包含多列的html表 在两列中我显示下拉列表 当用户从一个下拉列表中选择值时 选择Product1或Select Product2下拉列表 我想删除在一个下拉列表中选择的选项 并且不要在另一个下拉列表中显示该选项 下面的示例代码适用
  • Springboot 集成Druid

    Springboot 集成Druid Druid是Java语言中最好的数据库连接池 Druid能够提供强大的监控和扩展功能 本篇主要讲解一下 Springboot中如何集成 Druid 1 添加Druid依赖