Java使用Alibaba Druid數(shù)據(jù)庫連接池的技術(shù)指南
1、簡述
在 Java 應(yīng)用中,數(shù)據(jù)庫連接池是數(shù)據(jù)庫訪問性能優(yōu)化的關(guān)鍵工具。阿里巴巴 Druid 是一款功能強(qiáng)大、性能卓越的數(shù)據(jù)庫連接池,它不僅支持高效的連接管理,還集成了 SQL 監(jiān)控、日志輸出和多種擴(kuò)展功能。
本文將從 Druid 的基本概念出發(fā),結(jié)合具體樣例,帶你全面掌握 Druid 的配置與使用。
2、環(huán)境準(zhǔn)備
Druid 是由阿里巴巴開源的數(shù)據(jù)庫連接池,特點(diǎn)包括:
- 高性能:連接池性能媲美甚至超過 HikariCP。
- SQL監(jiān)控:支持 SQL 執(zhí)行的性能統(tǒng)計、慢 SQL 檢測等功能。
- 擴(kuò)展性強(qiáng):支持多種數(shù)據(jù)庫以及 SQL 防火墻等功能。
- 易用性:配置簡單,提供直觀的監(jiān)控界面。
2.1 引入依賴
在項(xiàng)目的 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 # 驗(yàn)證連接有效性 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 來實(shí)現(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"); // 驗(yàn)證 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 中,默認(rèn)已經(jīng)自動配置了 DruidStatViewServlet 和 WebStatFilter。啟動應(yīng)用后訪問 http://localhost:8080/druid 即可查看監(jiān)控界面。

3、數(shù)據(jù)集成樣例
使用 Druid 數(shù)據(jù)庫鏈接池可以實(shí)現(xiàn) SQL 監(jiān)控和慢 SQL 檢測, 可以實(shí)時查看連接池的狀態(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;
/**
* 手機(jī)號
*/
@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 是一款功能強(qiáng)大的數(shù)據(jù)庫連接池,它不僅提供高性能的連接管理,還集成了豐富的監(jiān)控和安全功能。在實(shí)際項(xiàng)目中,通過合理的配置和優(yōu)化,可以有效提升系統(tǒng)的數(shù)據(jù)庫訪問效率。以下核心功能回顧:
- 高性能連接管理
- SQL 監(jiān)控和慢 SQL 檢測
- 安全防護(hù)(SQL 防火墻)
- 易于集成的監(jiān)控界面
通過本博客,你應(yīng)該能夠快速掌握 Druid 的基本使用,并在實(shí)際項(xiàng)目中加以應(yīng)用!
到此這篇關(guān)于Java使用Alibaba Druid數(shù)據(jù)庫連接池的技術(shù)指南的文章就介紹到這了,更多相關(guān)Java使用Alibaba Druid連接池內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)樹形結(jié)構(gòu)管理的組合設(shè)計模式
Java組合模式是一種結(jié)構(gòu)型設(shè)計模式,它允許將對象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu)。組合模式使得用戶可以使用統(tǒng)一的方式處理單個對象和對象組合,從而簡化了系統(tǒng)的設(shè)計和維護(hù)2023-04-04
mybatis3.4.0不支持LocalDateTime的解決方法(No typehandler f
本文主要介紹了mybatis3.4.0不支持LocalDateTime的解決方法(No typehandler found for property time),具有一定的參考價值,感興趣的可以了解一下2025-03-03
在Spring Boot中實(shí)現(xiàn)文件上傳與管理的操作
在 Spring Boot 中實(shí)現(xiàn)文件上傳與管理非常簡單,通過配置文件上傳、創(chuàng)建文件上傳、下載、列表和刪除接口,我們可以輕松地處理文件操作,結(jié)合前端頁面,可以提供一個完整的文件管理系統(tǒng),這篇文章主要介紹了在Spring Boot中實(shí)現(xiàn)文件上傳與管理,需要的朋友可以參考下2024-07-07
Java線程活鎖的實(shí)現(xiàn)與死鎖等的區(qū)別
活鎖是一種遞歸情況,其中兩個或更多線程將繼續(xù)重復(fù)特定的代碼邏輯,本文主要介紹了Java線程活鎖的實(shí)現(xiàn)與死鎖等的區(qū)別,具有一定的參考價值,感興趣的可以了解一下2024-04-04

