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连接池内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论