【转载】Springboot2.3.5 整合Druid 并解决 Druid的SQL监控没有数据

转自

更新

2023/12/18 更新配置文件引入包信息,druid版本更新,log4j-core引入。

正文

  1. pom.xml 添加
<!-- druid数据源,线程池依赖 -->
<!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid-spring-boot-starter</artifactId>
	<version>1.2.20</version>
</dependency>
<!-- 别的教程提示要安装该依赖,但是测试不添加也可以记录sql监控 -->
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<!-- <dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-core</artifactId>
  <version>2.22.0</version>
 </dependency> -->

  1. config/ 创建 DruidDataSourceConfig 类
package com.xiaqiuchu.demo.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.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
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;
import javax.sql.DataSource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

@Configuration
public class DruidDataSourceConfig {

    /**
     * 添加 DruidDataSource 组件到容器中,并绑定属性
     */
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    @ConditionalOnProperty(name = "spring.datasource.type", havingValue = "com.alibaba.druid.pool.DruidDataSource")
    public DataSource druid(){
        return new DruidDataSource();
    }

    /**
     * 配置 Druid 监控管理后台的Servlet;
     * 内置 Servlet 容器时没有web.xml文件,所以使用 Spring Boot 的注册 Servlet 方式
     */
    @Bean
    @ConditionalOnClass(DruidDataSource.class)
    public ServletRegistrationBean statViewServlet(){
        // 这些参数可以在 http.StatViewServlet 的父类 ResourceServlet 中找到
        Map<String,String> initParams = new HashMap<>();
        initParams.put("loginUsername","admin");
        initParams.put("loginPassword","123456");
        // allow:Druid 后台允许谁可以访问。默认就是允许所有访问。
        initParams.put("allow",""); // 后面参数为空则所有人都能访问,一般会写一个具体的ip或ip段
        // deny:Druid 后台禁止谁能访问
        // initParams.put("deny","192.168.10.132");

        // 注册一个servlet,同时表明/druid/* 这个请求会走到这个servlet,而druid内置了这个请求的接收
        ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        bean.setInitParameters(initParams);
        return bean;
    }

    /**
     * 配置一个web监控的filter
     */
    @Bean
    @ConditionalOnClass(DruidDataSource.class)
    public FilterRegistrationBean webStatFilter(){
        Map<String,String> initParams = new HashMap<>();
        // 这些不进行统计
        initParams.put("exclusions","*.js,*.css,/druid/*");

        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setFilter(new WebStatFilter());
        bean.setInitParameters(initParams);
        bean.setUrlPatterns(Arrays.asList("/*"));
        return  bean;
    }
}
  1. 在配置文件 application.properties 内添加
# druid使用
spring.datasource.druid.enable=true
#
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# 初始连接数
spring.datasource.druid.initial-size=5
# 最小连接池数量
spring.datasource.druid.min-idle=10
# 最大连接池数量
spring.datasource.druid.max-active=200
# 监控登陆页面账号密码
# spring.datasource.druid.stat-view-servlet.login-username=admin
# spring.datasource.druid.stat-view-servlet.login-password=admin1
# 开启 SQL 监控,解决控制面板无数据问题。
spring.datasource.filters=stat,Log4j,wall
  1. 重启应用并访问浏览器访问 你的应用web地址/druid ,输入在配置文件设置的账号密码登陆即可
posted @   夏秋初  阅读(1068)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示