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();
        }
    }
}
Logo

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

更多推荐