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)境準(zhǔ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 中,默認(rèn)已經(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 檢測
- 安全防護(hù)(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ù),本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2018-09-09Java紅黑樹的數(shù)據(jù)結(jié)構(gòu)與算法解析
紅黑樹問題是各大計算機考研命題以及面試算法題目中的熱門,接下來我們?yōu)榇蠹覉D解紅黑樹的數(shù)據(jù)結(jié)構(gòu)與算法解析,需要的朋友可以參考下2021-08-08