Java使用Alibaba Druid数据库连接池的技术指南

 更新时间:2025年03月17日 11:14:08   作者:拾荒的小海螺  
Druid是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池、插件框架和SQL解析器组成,它不仅支持高效的连接管理,还集成了 SQL 监控、日志输出和多种扩展功能,本文将从 Druid 的基本概念出发,结合具体样例,带你全面掌握 Druid 的配置与使用,需要的朋友可以参考下

1、简述

在 Java 应用中,数据库连接池是数据库访问性能优化的关键工具。阿里巴巴 Druid 是一款功能强大、性能卓越的数据库连接池,它不仅支持高效的连接管理,还集成了 SQL 监控、日志输出和多种扩展功能。

本文将从 Druid 的基本概念出发,结合具体样例,带你全面掌握 Druid 的配置与使用。

2、环境准备

Druid 是由阿里巴巴开源的数据库连接池,特点包括:

  • 高性能:连接池性能媲美甚至超过 HikariCP。
  • SQL监控:支持 SQL 执行的性能统计、慢 SQL 检测等功能。
  • 扩展性强:支持多种数据库以及 SQL 防火墙等功能。
  • 易用性:配置简单,提供直观的监控界面。

2.1 引入依赖

在项目的 pom.xml 文件中添加以下依赖:

<!-- mybatis-plus -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.3.1</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.19</version>
</dependency>
<!-- druid -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.16</version>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.34</version>
    <scope>provided</scope>
</dependency>

2.2 基础配置

在 application.yml 文件中添加 Druid 数据源的基本配置:

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://192.168.22.181:3306/shop_admin?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
      username: shop
      password: 123456
      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    # 验证连接有效性 SQL
      test-on-borrow: false         # 借用连接时是否测试
      test-on-return: false         # 归还连接时是否测试
      test-while-idle: true         # 空闲时测试连接
      stat-view-servlet:
        enabled: true
        login-username: admin      # Druid 监控页用户名
        login-password: admin123      # Druid 监控页密码
      web-stat-filter:
        enabled: true
        exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" # 排除的 URL

2.3 Config 里面配置数据源

或者可以通过@Configuration 初始化DataSource 来实现数据源配置:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.alibaba.druid.pool.DruidDataSource;

import javax.sql.DataSource;

@Configuration
public class DataSourceConfig {

    @Bean
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl("jdbc:mysql://192.168.22.181:3306/shop_admin?useSSL=false&serverTimezone=UTC");
        dataSource.setUsername("shop");
        dataSource.setPassword("123456");
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");

        // Druid 特有配置
        dataSource.setInitialSize(5);      // 初始化连接数
        dataSource.setMaxActive(20);       // 最大连接数
        dataSource.setMinIdle(5);          // 最小空闲连接数
        dataSource.setMaxWait(60000);      // 最大等待时间
        dataSource.setValidationQuery("SELECT 1"); // 验证 SQL
        dataSource.setTestOnBorrow(false);
        dataSource.setTestOnReturn(false);
        dataSource.setTestWhileIdle(true);
        return dataSource;
    }
}

2.4 配置 Druid 监控

Druid 提供了一个内置的监控页面,访问路径为 /druid。在 Spring Boot 中,默认已经自动配置了 DruidStatViewServlet 和 WebStatFilter。启动应用后访问 http://localhost:8080/druid 即可查看监控界面。

3、数据集成样例

使用 Druid 数据库链接池可以实现 SQL 监控和慢 SQL 检测, 可以实时查看连接池的状态,活跃数、空闲数等,拦截潜在危险的 SQL,我们通过合理的配置和优化,可以有效提升系统的数据库访问效率,以下提供mybatis服务使用样例:

package com.lm.druid.service;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lm.druid.entry.SysUserEntity;
import com.lm.druid.mapper.SysUserMapper;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service
public class UserService extends ServiceImpl<SysUserMapper, SysUserEntity> {

    @Resource
    private SysUserMapper sysUserMapper;

    public SysUserEntity getUserById(Long id){
        return sysUserMapper.selectById(id);
    }
}

SysUserMapper:

package com.lm.druid.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lm.druid.entry.SysUserEntity;

public interface SysUserMapper extends BaseMapper<SysUserEntity> {
}

SysUserEntity:

package com.lm.druid.entry;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;

@Data
@TableName("sys_user")
public class SysUserEntity implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 用户ID
     */
    @TableId(value = "user_id")
    private Long userId;

    /**
     * 用户名
     */
    @TableField("username")
    private String username;

    /**
     * 密码
     */
    @TableField("password")
    private String password;

    /**
     * 盐
     */
    @TableField("salt")
    private String salt;

    /**
     * 邮箱
     */
    @TableField("email")
    private String email;

    /**
     * 手机号
     */
    @TableField("mobile")
    private String mobile;

    /**
     * 状态  0:禁用   1:正常
     */
    @TableField("status")
    private Integer status;

    /**
     * 创建者ID
     */
    @TableField("create_user_id")
    private Long createUserId;

    /**
     * 创建时间
     */
    @TableField("create_time")
    private Date createTime;
}

在Controller控制层添加测试用例:

package com.lm.druid.controller;

import com.lm.druid.entry.SysUserEntity;
import com.lm.druid.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;


    @GetMapping("/getUserByIntId")
    public SysUserEntity getUserByIntId(@RequestParam Long id) {
        return userService.getUserById(id);
    }
}

在启动类中添加mapper映射路径:

@SpringBootApplication
@MapperScan("com.lm.druid.mapper")
public class DruidApplication {
    public static void main(String[] args) {
        SpringApplication.run(DruidApplication.class, args);
    }
}

4、总结

Druid 是一款功能强大的数据库连接池,它不仅提供高性能的连接管理,还集成了丰富的监控和安全功能。在实际项目中,通过合理的配置和优化,可以有效提升系统的数据库访问效率。以下核心功能回顾:

  • 高性能连接管理
  • SQL 监控和慢 SQL 检测
  • 安全防护(SQL 防火墙)
  • 易于集成的监控界面

通过本博客,你应该能够快速掌握 Druid 的基本使用,并在实际项目中加以应用!

到此这篇关于Java使用Alibaba Druid数据库连接池的技术指南的文章就介绍到这了,更多相关Java使用Alibaba Druid连接池内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JVM的7种垃圾回收器(小结)

    JVM的7种垃圾回收器(小结)

    这篇文章主要介绍了JVM的7种垃圾回收器(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Java实现树形结构管理的组合设计模式

    Java实现树形结构管理的组合设计模式

    Java组合模式是一种结构型设计模式,它允许将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户可以使用统一的方式处理单个对象和对象组合,从而简化了系统的设计和维护
    2023-04-04
  • mybatis3.4.0不支持LocalDateTime的解决方法(No typehandler found for property time)

    mybatis3.4.0不支持LocalDateTime的解决方法(No typehandler f

    本文主要介绍了mybatis3.4.0不支持LocalDateTime的解决方法(No typehandler found for property time),具有一定的参考价值,感兴趣的可以了解一下
    2025-03-03
  • 在Spring Boot中实现文件上传与管理的操作

    在Spring Boot中实现文件上传与管理的操作

    在 Spring Boot 中实现文件上传与管理非常简单,通过配置文件上传、创建文件上传、下载、列表和删除接口,我们可以轻松地处理文件操作,结合前端页面,可以提供一个完整的文件管理系统,这篇文章主要介绍了在Spring Boot中实现文件上传与管理,需要的朋友可以参考下
    2024-07-07
  • Java世界时区自动计算及时间生成方法详解

    Java世界时区自动计算及时间生成方法详解

    这篇文章主要为大家详细介绍了Java中世界时区自动计算及时间生成的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-12-12
  • Java线程活锁的实现与死锁等的区别

    Java线程活锁的实现与死锁等的区别

    活锁是一种递归情况,其中两个或更多线程将继续重复特定的代码逻辑,本文主要介绍了Java线程活锁的实现与死锁等的区别,具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04
  • 剖析Fork join并发框架工作窃取算法

    剖析Fork join并发框架工作窃取算法

    这篇文章主要为大家剖析介绍了Fork join并发框架工作窃取算法的示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Java编程获取经纬度之间距离的方法

    Java编程获取经纬度之间距离的方法

    这篇文章主要介绍了Java编程获取经纬度之间距离的方法,涉及Java数学运算的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • java 图片加水印实例代码

    java 图片加水印实例代码

    java 图片加水印实例代码,需要的朋友可以参考一下
    2013-06-06
  • Mybatis逆向工程时失败问题及解决

    Mybatis逆向工程时失败问题及解决

    这篇文章主要介绍了Mybatis逆向工程时失败问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11

最新评论