【SpringBoot | Druid】SpringBoot整合Druid
SpringBoot整合Druid
Druid是个十分强大的后端管理工具,具体的功能和用途请问阿里爸爸
1. 在pom.xml中导入包
<!-- alibaba 的druid数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.18</version>
</dependency>
2. 配置Druid
- 首先在application.yml中配置druid
spring:
datasource:
password: xxx
# 如果存在多个数据源,监控的时候可以通过名字来区分开来
name: mysql
# 使用druid数据源
type: com.alibaba.druid.pool.DruidDataSource
# 驱动名字
driver-class-name: com.mysql.cj.jdbc.Driver
# 连接数据库的url
url: jdbc:mysql://localhost:3306/xxx?serverTimezone=Asia/Shanghai&allowMultiQueries=true
# 连接数据库的账号
username: xxx
# 连接数据库的密码
# 扩展插件
# 监控统计用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall
filters: stat, wall
# 最大连接池数量
maxActive: 20
# 初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
initialSize: 5
# 获取连接时最大等待时间,单位毫秒
maxWait: 60000
# 最小连接池数量
minIdle: 1
timeBetweenEvictionRunsMillis: 60000
# 连接保持空闲而不被驱逐的最长时间
minEvictableIdleTimeMillis: 300000
# 用来检测连接是否有效的sql,要求是一个查询语句
# 如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会其作用
validationQuery: select count(1) from 'table'
# 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效
testWhileIdle: true
# 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
testOnBorrow: false
# 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
testOnReturn: false
# 是否缓存preparedStatement,即PSCache
poolPreparedStatements: false
# 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true
maxOpenPreparedStatements: -1
- 其次编写Druid配置类
package xxx.xxx.xxx.config;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.beans.factory.annotation.Value;
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.Collections;
import java.util.HashMap;
import java.util.Map;
/**
* 配置 Druid
*
* @author axiang
*/
@Configuration
public class DruidConfig {
/* 设置Druid配置的默认前缀为 spring.datasource */
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druid() {
return new DruidDataSource();
}
/* 自定义配置Druid管理界面的访问账户名 */
@Value("${xxx.config.druid.name}")
private String name;
/* 自定义配置Druid管理界面的访问密码 */
@Value("${xxx.config.druid.pwd}")
private String pwd;
/**
* 配置Druid的监控
* 配置一个管理后台的servlet
*
* @return
*/
@Bean
public ServletRegistrationBean statViewServlet() {
ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
Map<String, String> initParams = new HashMap<>(10);
//账号
initParams.put("loginUsername", name);
//密码
initParams.put("loginPassword", pwd);
//默认允许所有
initParams.put("allow", "");
//不允许的黑名单ip
initParams.put("deny", "");
bean.setInitParameters(initParams);
return bean;
}
/**
* 配置一个监控的filter
*
* @return
*/
@Bean
public FilterRegistrationBean webStatFilter() {
FilterRegistrationBean bean = new FilterRegistrationBean();
bean.setFilter(new WebStatFilter());
Map<String, String> initParams = new HashMap<>(10);
initParams.put("exclusions", "*.js,*.css,/druid/*");
bean.setInitParameters(initParams);
bean.setUrlPatterns(Collections.singletonList("/*"));
return bean;
}
}
3. 访问和测试
输入下面的IP,进入页面访问Druid内容
http://[IP地址]:[端口号]/[项目部署名]/druid/index.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】博客园2025新款「AI繁忙」系列T恤上架,前往周边小店选购
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 通过一个DEMO理解MCP(模型上下文协议)的生命周期
· MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题
· 记一次 .NET某固高运动卡测试 卡慢分析
· 微服务架构学习与思考:微服务拆分的原则
· 记一次 .NET某云HIS系统 CPU爆高分析
· AI浏览器自动化实战
· Chat to MySQL 最佳实践:MCP Server 服务调用
· 解锁.NET 9性能优化黑科技:从内存管理到Web性能的最全指南
· .NET周刊【3月第5期 2025-03-30】
· 重生之我是操作系统(八)----文件管理(上)
2018-11-22 领扣(LeetCode)两数之和II - 输入有序数组 个人题解
2018-11-22 领扣(LeetCode)七进制数 个人题解
2018-11-22 领扣(LeetCode)单调数列 个人题解