Java使用Alibaba Druid數(shù)據(jù)庫連接池的技術(shù)指南
1、簡述
在 Java 應(yīng)用中,數(shù)據(jù)庫連接池是數(shù)據(jù)庫訪問性能優(yōu)化的關(guān)鍵工具。阿里巴巴 Druid 是一款功能強大、性能卓越的數(shù)據(jù)庫連接池,它不僅支持高效的連接管理,還集成了 SQL 監(jiān)控、日志輸出和多種擴展功能。
本文將從 Druid 的基本概念出發(fā),結(jié)合具體樣例,帶你全面掌握 Druid 的配置與使用。
2、環(huán)境準備
Druid 是由阿里巴巴開源的數(shù)據(jù)庫連接池,特點包括:
- 高性能:連接池性能媲美甚至超過 HikariCP。
- SQL監(jiān)控:支持 SQL 執(zhí)行的性能統(tǒng)計、慢 SQL 檢測等功能。
- 擴展性強:支持多種數(shù)據(jù)庫以及 SQL 防火墻等功能。
- 易用性:配置簡單,提供直觀的監(jiān)控界面。
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 基礎(chǔ)配置
在 application.yml 文件中添加 Druid 數(shù)據(jù)源的基本配置:
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 # 初始化連接數(shù)
min-idle: 5 # 最小空閑連接數(shù)
max-active: 20 # 最大連接數(shù)
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 監(jiān)控頁用戶名
login-password: admin123 # Druid 監(jiān)控頁密碼
web-stat-filter:
enabled: true
exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" # 排除的 URL
2.3 Config 里面配置數(shù)據(jù)源
或者可以通過@Configuration 初始化DataSource 來實現(xiàn)數(shù)據(jù)源配置:
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); // 初始化連接數(shù)
dataSource.setMaxActive(20); // 最大連接數(shù)
dataSource.setMinIdle(5); // 最小空閑連接數(shù)
dataSource.setMaxWait(60000); // 最大等待時間
dataSource.setValidationQuery("SELECT 1"); // 驗證 SQL
dataSource.setTestOnBorrow(false);
dataSource.setTestOnReturn(false);
dataSource.setTestWhileIdle(true);
return dataSource;
}
}
2.4 配置 Druid 監(jiān)控
Druid 提供了一個內(nèi)置的監(jiān)控頁面,訪問路徑為 /druid。在 Spring Boot 中,默認已經(jīng)自動配置了 DruidStatViewServlet 和 WebStatFilter。啟動應(yīng)用后訪問 http://localhost:8080/druid 即可查看監(jiān)控界面。

3、數(shù)據(jù)集成樣例
使用 Druid 數(shù)據(jù)庫鏈接池可以實現(xiàn) SQL 監(jiān)控和慢 SQL 檢測, 可以實時查看連接池的狀態(tài),活躍數(shù)、空閑數(shù)等,攔截潛在危險的 SQL,我們通過合理的配置和優(yōu)化,可以有效提升系統(tǒng)的數(shù)據(jù)庫訪問效率,以下提供mybatis服務(wù)使用樣例:
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;
/**
* 狀態(tài) 0:禁用 1:正常
*/
@TableField("status")
private Integer status;
/**
* 創(chuàng)建者ID
*/
@TableField("create_user_id")
private Long createUserId;
/**
* 創(chuàng)建時間
*/
@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、總結(jié)
Druid 是一款功能強大的數(shù)據(jù)庫連接池,它不僅提供高性能的連接管理,還集成了豐富的監(jiān)控和安全功能。在實際項目中,通過合理的配置和優(yōu)化,可以有效提升系統(tǒng)的數(shù)據(jù)庫訪問效率。以下核心功能回顧:
- 高性能連接管理
- SQL 監(jiān)控和慢 SQL 檢測
- 安全防護(SQL 防火墻)
- 易于集成的監(jiān)控界面
通過本博客,你應(yīng)該能夠快速掌握 Druid 的基本使用,并在實際項目中加以應(yīng)用!
到此這篇關(guān)于Java使用Alibaba Druid數(shù)據(jù)庫連接池的技術(shù)指南的文章就介紹到這了,更多相關(guān)Java使用Alibaba Druid連接池內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java 讀取、獲取配置文件.properties中的數(shù)據(jù)
這篇文章主要介紹了Java 讀取、獲取配置文件.properties中的數(shù)據(jù),本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2018-09-09
Java紅黑樹的數(shù)據(jù)結(jié)構(gòu)與算法解析
紅黑樹問題是各大計算機考研命題以及面試算法題目中的熱門,接下來我們?yōu)榇蠹覉D解紅黑樹的數(shù)據(jù)結(jié)構(gòu)與算法解析,需要的朋友可以參考下2021-08-08

