【转载】Springboot2.3.5 整合Druid 并解决 Druid的SQL监控没有数据
转自
更新
2023/12/18 更新配置文件引入包信息,druid版本更新,log4j-core引入。
正文
- 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> -->
- 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;
}
}
- 在配置文件 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
- 重启应用并访问浏览器访问 你的应用web地址/druid ,输入在配置文件设置的账号密码登陆即可
博 主 :夏秋初
地 址 :https://www.cnblogs.com/xiaqiuchu/articles/15112153.html
如果对你有帮助,可以点一下 推荐 或者 关注 吗?会让我的分享变得更有动力~
转载时请带上原文链接,谢谢。
地 址 :https://www.cnblogs.com/xiaqiuchu/articles/15112153.html
如果对你有帮助,可以点一下 推荐 或者 关注 吗?会让我的分享变得更有动力~
转载时请带上原文链接,谢谢。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义