Druid 数据库连接池的使用
Druid 是阿里巴巴开源的一个高效、功能强大且可扩展的数据库连接池,它结合了 C3P0、DBCP 等数据库连接池的优点,并且同时拥有监控功能。Druid 能够提供强大的监控和扩展功能,是目前最好的数据库连接池之一。
Druid 简介
Druid 是阿里巴巴开源的一个高效、功能强大且可扩展的数据库连接池,它结合了 C3P0、DBCP 等数据库连接池的优点,并且同时拥有监控功能。Druid 能够提供强大的监控和扩展功能,是目前最好的数据库连接池之一。
Druid 的优点
-
高性能:在相同硬件条件下,Druid 在单线程和多线程环境下对比其他连接池(如 DBCP、C3P0)有明显的性能优势。
-
兼容性强:支持几乎所有的 JDBC 兼容数据库,包括 MySQL、Oracle、SQL Server 等主流数据库。
-
监控功能:Druid 提供了非常强大的监控功能,可以监控数据库访问的 SQL 执行情况、连接池的状态等。通过 Druid 提供的监控界面,可以实时查看数据库连接的状态以及执行的 SQL 语句等信息。
-
扩展性好:除了基本的数据库连接池管理功能外,Druid 还提供了许多扩展点,用户可以根据自己的需求进行定制开发。
-
灵活性高:支持多种配置方式,包括但不限于 XML 配置、Java 代码配置等,能够满足不同场景下的使用需求。
-
安全性:提供了对数据库密码的加密存储功能,增强了数据库连接的安全性。
-
内置过滤器:Druid 内置了很多有用的过滤器,例如用于监控的 stat 滤器、用于防止 SQL 注入的 wall 过滤器等,可以帮助开发者更好地管理和保护数据库连接。
Druid 的使用
Maven 依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.24</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.33</version>
</dependency>
在 Spring Boot 中使用 Druid
1、Spring Boot 项目 Maven 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.24</version>
</dependency>
2、application.yaml 配置文件
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
druid:
url: jdbc:mysql://localhost:3306/database?useSSL=false&useUnicode=true&characterEncoding=utf-8&useOldAliasMetadataBehavior=true&autoReconnect=true&serverTimezone=GMT%2B8
username: root
password: 123456
initial-size: 5 # 初始连接数
min-idle: 10 # 最小连接池数量
max-active: 20 # 最大连接池数量
max-wait: 60000 # 配置获取连接等待超时的时间,单位:毫秒
connect-timeout: 30000 # 配置连接超时时间
socket-timeout: 60000 # 配置网络超时时间
time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
test-while-idle: true
test-on-borrow: false
test-on-return: false
web-stat-filter:
enabled: true
stat-view-servlet:
enabled: true
allow: # 设置白名单,不填则允许所有访问
url-pattern: /druid/*
login-username: # 控制台管理用户名和密码
login-password:
filter:
stat:
enabled: true
log-slow-sql: true # 慢 SQL 记录
slow-sql-millis: 100
merge-sql: true
wall:
config:
multi-statement-allow: true
3、配置类
@Configuration
public class DruidConfig {
@Bean
@ConfigurationProperties("spring.datasource.druid")
public DataSource dataSource()
{
return DruidDataSourceBuilder.create().build();
}
}
4、测试连接
@RestController
public class TestController {
@Autowired
private DataSource dataSource;
@GetMapping("/testdb")
public String testDatabaseConnection() {
try (Connection connection = dataSource.getConnection()) {
if (connection != null && connection.isValid(5)) {
return "成功获取数据库连接: " + connection.getMetaData().getURL();
} else {
return "无法建立数据库连接";
}
} catch (SQLException e) {
e.printStackTrace();
return "数据库连接测试失败: " + e.getMessage();
}
}
}

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)