Springboot 集成Druid

news2024/10/5 17:22:55

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;
    }
}

完结! 

 

 

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

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

相关文章

【小白向】树莓派连接手机热点后 设置静态IP

树莓派连接手机热点后 设置静态IP 1.连接至手机热点2.查看当前 IP 地址3.修改 dhcpcd.conf 文件4.重启网络服务5.检查网络设置 1.连接至手机热点 在树莓派上打开 Wi-Fi 设置&#xff0c;并选择你要连接的手机热点&#xff0c;输入密码连接热点&#xff0c;确保你已经成功连接至…

十年磨一剑,超级人工智能如果出现,人类将如何应对挑战?

一、前言 创造出ChatGPT的OpenAI公司 CEO&#xff08;Sam&#xff09;称“十年内将出现超级人工智能”&#xff0c;你别不信&#xff0c;这极有可能。 具体来说&#xff0c;我们在人工智能能力方面看到了增长速度。我们现在需要做什么&#xff0c;好为将它们引入世界做好负责任…

开源共建下一代智能终端操作系统根社区 OpenHarmony携手伙伴聚力前行

6月12日,2023开放原子全球开源峰会OpenHarmony 分论坛(以下简称“分论坛”)在北京成功召开。OpenHarmony共建单位、生态伙伴齐聚一堂,共同展现了OpenHarmony在千行百业的落地成果、繁荣生态与最新技术进展。OpenHarmony项目群工作委员会委员、华为终端BG软件部副总裁柳晓见受邀…

[NOIP2012 提高组] 借教室

[NOIP2012 提高组] 借教室 题目描述: 在大学期间&#xff0c;经常需要租借教室。大到院系举办活动&#xff0c;小到学习小组自习讨论&#xff0c;都需要向学校申请借教室。教室的大小功能不同&#xff0c;借教室人的身份不同&#xff0c;借教室的手续也不一样。 面对海量租借…

【深度学习】pytorch pth模型转为onnx模型后出现冗余节点“identity”,onnx模型的冗余节点“identity”

情況描述 onnx模型的冗余节点“identity”如下图。 解决方式 首先&#xff0c;确保您已经安装了onnx-simplifier库&#xff1a; pip install onnx-simplifier然后&#xff0c;您可以按照以下方式使用onnx-simplifier库&#xff1a; import onnx from onnxsim import simp…

手机短视频设置背景文字工具

代码地址 github: https://github.com/iotzzh/tools-web gitee: https://gitee.com/iotzzh/tools-web.git 以前喜欢发抖音&#xff0c;内容是一些古诗文&#xff0c;然后找不到合适模板&#xff0c;于是自己就写了一个小工具&#xff0c;功能如下&#xff1a; 时间展示、支持选…

爬虫基础学习记录

爬虫介绍 互联网爬虫 如果我们把互联网比作一张大的蜘蛛网&#xff0c;那一台计算机上的数据便是蜘蛛网上的一个猎物&#xff0c;而爬虫程序就是一只小蜘蛛&#xff0c;沿着蜘蛛网抓取自己想要的数据 解释1&#xff1a;通过一个程序&#xff0c;根据Url(http://www.taobao.c…

❤ vue主要使用的版本和对应体系

❤ 项目主要使用的版本和对应体系 vue地址&#xff1a; https://cn.vuejs.org/ Vue所有版本地址 https://github.com/vuejs/core/blob/main/changelogs/CHANGELOG-3.2.md NPM镜像地址 npm install -g cnpm --registryhttps://registry.npm.taobao.org nvm 地址&#xff1a; htt…

element(兼容2.72以下的版本)实现树形数据+复选框的效果

用最新的element是可以实现树形数据的展示&#xff0c;但是没有复选框效果&#xff0c;用2.72以前的版本的话&#xff0c;是根本没有展开树形数据的效果&#xff0c;也没有复选框效果&#xff0c; 需求&#xff1a;在2.72以下的老版本上做一个树形展示的效果&#xff0c;并且还…

初识Notes Domino 14 Drop1

大家好&#xff0c;才是真的好。 周末花了点时间&#xff0c;安装了一下Notes Domino 14 Drop1版本。考虑到大多数人的习惯&#xff0c;没采用Docker或K8s方式来部署&#xff0c;也没采用一键配置功能&#xff0c;依旧通过传统方式一步一步进行安装和配置&#xff0c;这样大家…

【Spring Boot 初识丨五】beans 详解

上一篇讲了 Spring Boot 的主程序类 本篇来讲一讲 beans 详解 Spring Boot 初识&#xff1a; 【Spring Boot 初识丨一】入门实战 【Spring Boot 初识丨二】maven 【Spring Boot 初识丨三】starter 【Spring Boot 初识丨四】主应用类 beans 一、 定义二、 命名三、 生命周期3.1 …

Linux防火墙学习笔记7

安装apahce&#xff1a; yum install -y httpd echo 123 >> /var/www/html/index.html systemctl start httpd curl http://localhost 然后给iptables插入一条防火墙策略&#xff1a; iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT注意&#xff1a;这里使…

【Spring学习之更简单的读取和存储Bean对象】教会你使用五大类注解和方法注解去存储 Bean 对象

前言&#xff1a; &#x1f49e;&#x1f49e;今天我们依然是学习Spring&#xff0c;这里我们会更加了解Spring的知识&#xff0c;知道Spring是怎么更加简单的读取和存储Bean对象的。也会让大家对Spring更加了解。 &#x1f49f;&#x1f49f;前路漫漫&#xff0c;希望大家坚持…

高能预警!融云WICC发布《社交泛娱乐出海作战地图》

最近圈子里风很大的《社交泛娱乐出海作战地图》, 必须说&#xff0c;真的有亿点点厉害&#xff01;这简直是一张集社交泛娱乐市场、品类知识和出海实战指南于一体的教材级地图&#xff0c;实感入手不亏。关注【融云全球互联网通信云】了解更多 首先&#xff0c;容我先秀一把实…

Definition of regularity in PDE theory

Regularity is one of the vague yet very useful terms to talk about a vast variety of results in a uniform way. Other examples of such words include “dynamics” in dynamical systems (I have never seen a real definition of this term but everyone uses it, an…

学习Vue 之 创建一个 Vue 应用

文章目录 Vue.js概述了解 Vue创建一个 Vue 应用参考 Vue.js 概述 计划学习前端&#xff0c;已有一些HTML&#xff0c;js&#xff0c;CSS的基础知识&#xff0c;下一步学习Vue.js。 以下是一些适合新手的Vue.js教程&#xff0c;你可以根据自己的实际情况和需求选择适合自己的…

独家揭秘:Kotlin编译器前端—解析阶段

独家揭秘&#xff1a;Kotlin编译器前端&#xff1a;解析阶段 Kotlin编译器对我来说就像一个黑盒子&#xff0c;虽然有关于Kotlin PSI在IDE插件中有使用的文档&#xff0c;但除了源代码中留下的注释之外&#xff0c;几乎没有其他信息可用。接下来的文章中我们来探索Kotlin编译器…

6. WebGPU 将图像导入纹理

我们在上一篇文章中介绍了有关使用纹理的一些基础知识。在本文中&#xff0c;我们将介绍从图像导入纹理。 在上一篇文章中&#xff0c;通过调用 device.createTexture 创建了一个纹理&#xff0c;然后通过调用 device.queue.writeTexture 将数据放入纹理中。 device.queue 上还…

Axure教程—穿梭框(中继器+动态面板)

本文将教大家如何用AXURE中动态面板和中继器制作穿梭框效果 一、效果 预览地址&#xff1a;https://8k99mh.axshare.com 下载地址&#xff1a;https://download.csdn.net/download/weixin_43516258/87897661?spm1001.2014.3001.5503 二、功能 在待选区域选项中可以选择一个选…

CURL获取与使用

背景&#xff1a;在日常工作中&#xff0c;经常会遇到需要获取CURL构造请求来进行问题定位&#xff0c;那如何获取及使用CURL则成为一个测试人员必备的技能&#xff1b; CURL是什么 CURL是一个命令行工具&#xff0c;开发人员使用它来与服务器进行数据交互。 如何获取完整 C…