赞
踩
Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。功能强大,能防SQL注入,内置Loging能诊断Hack应用行为。除了提供基本的数据源功能外,还具备以下优势:
高效的数据库连接池管理
高性能:在并发环境下表现优越,处理大量数据库连接请求。
稳定性:在高并发和高负载情况下保持稳定,避免连接泄漏。
易用性:配置简单,快速集成到Java应用中。
丰富的监控功能
便捷的配置和扩展
多数据库支持:支持MySQL、Oracle、PostgreSQL等多种数据库。
灵活配置:提供丰富的配置选项,灵活调整。
插件机制:支持插件扩展功能,如stat
、wall
、log4j
等。
SQL执行日志和统计分析
SQL执行日志:记录SQL执行时间、次数、影响行数等。
统计分析:提供SQL执行统计分析,帮助优化SQL性能。
慢SQL检测:自动检测慢SQL,提供详细执行信息,便于调优。
提高系统安全性
SQL防火墙:配置防火墙规则,拦截非法SQL请求,防止SQL注入。
黑白名单机制:配置IP黑白名单,限制特定IP访问权限。
功能类别 | 功能 | Druid | HikariCP | DBCP | Tomcat-jdbc | C3P0 |
---|---|---|---|---|---|---|
性能 | PSCache | 是 | 否 | 是 | 是 | 是 |
LRU | 是 | 否 | 是 | 是 | 是 | |
SLB负载均衡支持 | 是 | 否 | 否 | 否 | 否 | |
稳定性 | ExceptionSorter | 是 | 否 | 否 | 否 | 否 |
扩展 | 扩展 | Filter | JdbcIntercepter | |||
监控 | 监控方式 | jmx/log/http | jmx/metrics | jmx | jmx | jmx |
支持SQL级监控 | 是 | 否 | 否 | 否 | 否 | |
Spring/Web关联监控 | 是 | 否 | 否 | 否 | 否 | |
诊断支持 | LogFilter | 否 | 否 | 否 | 否 | |
连接泄露诊断 | logAbandoned | 否 | 否 | 否 | 否 | |
安全 | SQL防注入 | 是 | 无 | 无 | 无 | 无 |
支持配置加密 | 是 | 否 | 否 | 否 | 否 |
这里的Druid版本必须要选择1.2.20及以上版本,否则无法运行。
还有一点,Druid的版本要与mysql-connector-java的版本相匹配,可以去下面的网站看:
Maven Repository: com.alibaba » druid » 1.2.20 (mvnrepository.com)
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-3-starter</artifactId>
<version>1.2.20</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.32</version>
</dependency>
相关配置的详细信息可见:DruidDataSource配置属性列表 · alibaba/druid Wiki (github.com)
spring:
application:
name: server
profiles:
active: dev # 激活dev配置文件
datasource:
url: jdbc:mysql://${voyager.db.host}:3306/study_db?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: ${voyager.db.pw}
# druid 相关参数配置
druid:
# 初始化连接大小
initial-size: 5
# 最小连接池数量
min-idle: 5
# 最大连接池数量
max-active: 20
# 获取连接时最大等待时间,单位毫秒
max-wait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
time-between-eviction-runs-millis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
min-evictable-idle-time-millis: 300000
# 测试连接
validation-query: SELECT 1 FROM DUAL
# 配置监控统计用的filters,过滤掉静态文件
web-stat-filter:
# 启用Web统计过滤器
enabled: true
# 过滤匹配规则
url-pattern: /*
# 过滤忽略的格式
exclusions: /druid/*,*.js,*.css,*.gif,*.jpg,*.bmp,*.png,*.ico
# 配置可视化控制台页面
stat-view-servlet:
enabled: true
# 访问Druid监控页面的地址,首页默认是 /druid/index.html
url-pattern: /druid/*
# 禁用重置按钮
reset-enable: true
# 登录用户名
login-username: root
# 登录密码
login-password: 123456
# 通过别名的方式配置扩展插件 常用的插件有:监控统计用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall 防御sql注入的filter:wall
filter:
stat:
enabled: true
# 是否开启慢sql
log-slow-sql: true
# 是否开启SQL合并
merge-sql: true
# 慢sql的时间标准 单位:毫秒
slow-sql-millis: 1000
注意:不要使用lombok的@RequiredArgsConstructor注解,JUnit5好像无法自动装配,详情来自:
https://stackoverflow.com/questions/51867650/junit-5-no-parameterresolver-registered-for-parameter
@SpringBootTest
class SmartApplicationTest {
@Autowired
private DataSource dataSource ;
@Test
void contextLoads() {
System.out.println(dataSource.getClass());
DruidDataSource druidDataSource = (DruidDataSource) dataSource;
System.out.println("druidDataSource.getUrl() = " + druidDataSource.getUrl());
System.out.println("druidDataSource.getUsername() = " + druidDataSource.getUsername());
System.out.println("druidDataSource.getInitialSize() = " + druidDataSource.getInitialSize());
System.out.println("druidDataSource.getMaxActive() = " + druidDataSource.getMaxActive());
}
}
运行测试:
可以看到配置类的相关配置已经生效。
启动自己项目中的SpringBootApplication
类后访问http://localhost:8084/druid/login.html(改为自己服务的端口),输入账号密码后即可进入:
测试接口
@RequestMapping("/user")
@RestController
@RequiredArgsConstructor
public class UserInfoController {
private final UserInfoService userInfoService;
@GetMapping("/test")
public Result<UserInfo> login() {
return Result.success(userInfoService.getById(1));
}
}
进行测试
在命令行中执行如下命令:
java -cp D:\Develop\Maven\mvnRespo\com\alibaba\druid\1.2.20\druid-1.2.20.jar com.alibaba.druid.filter.config.ConfigTools your_password
输出
privateKey:MIIBVgIBADANBgkqhkiG9w0BAQEFAASCAUAwggE8AgEAAkEA6+4avFnQKP+O7bu5YnxWoOZjv3no4aFV558HTPDoXs6EGD0HP7RzzhGPOKmpLQ1BbA5viSht+aDdaxXp6SvtMQIDAQABAkAeQt4fBo4SlCTrDUcMANLDtIlax/I87oqsONOg5M2JS0jNSbZuAXDv7/YEGEtMKuIESBZh7pvVG8FV531/fyOZAiEA+POkE+QwVbUfGyeugR6IGvnt4yeOwkC3bUoATScsN98CIQDynBXC8YngDNwZ62QPX+ONpqCel6g8NO9VKC+ETaS87wIhAKRouxZL38PqfqV/WlZ5ZGd0YS9gA360IK8zbOmHEkO/AiEAsES3iuvzQNYXFL3x9Tm2GzT1fkSx9wx+12BbJcVD7AECIQCD3Tv9S+AgRhQoNcuaSDNluVrL/B/wOmJRLqaOVJLQGg==
publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOvuGrxZ0Cj/ju27uWJ8VqDmY7956OGhVeefB0zw6F7OhBg9Bz+0c84RjzipqS0NQWwOb4kobfmg3WsV6ekr7TECAwEAAQ==
password:PNak4Yui0+2Ft6JSoKBsgNPl+A033rdLhFw+L0np1o+HDRrCo9VkCuiiXviEMYwUgpHZUFxb2FpE0YmSguuRww==
spring:
datasource:
url: jdbc:mysql://${voyager.db.host}:3306/study_db?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: password # 修改为控制台输出的password
#druid数据源配置
druid:
# Druid数据源的公钥
public-key: publicKey # 修改为控制台输出的publicKey
filter:
# 启用Druid的过滤器配置
config:
enabled: true
connect-properties:
# 启用Druid的连接属性解密功能
config.decrypt: true
config.decrypt.key: publicKey # 控制台输出的publicKey
启动启动类,请求测试接口:
在这篇文章中,我们详细介绍了如何在Spring Boot项目中集成Druid数据源,并实现SQL监控和数据库密码加密等功能,Druid还有许多有用的功能,这里就不过多展示了,希望本文对大家有所帮助
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。