SpringBoot 3.x使用starter整合Druid的過程及問題小結(jié)
Druid介紹
Druid是阿里巴巴的一個(gè)開源項(xiàng)目,號稱為監(jiān)控而生的數(shù)據(jù)庫連接池,在功能、性能、擴(kuò)展性方面都超過其他例如DBCP、C3P0、BoneCP、Proxool、JBoss DataSource等連接池,而且Druid已經(jīng)在阿里巴巴部署了超過600個(gè)應(yīng)用,通過了極為嚴(yán)格的考驗(yàn),這才收獲了大家的青睞!
本地開發(fā)環(huán)境說明
| 開發(fā)依賴 | 版本 |
|---|---|
| Spring Boot | 3.0.6 |
| druid-spring-boot-3-starter | 1.2.18 |
| JDK | 20 |
SpringBoot集成Druid
如果是SpringBoot 2.x,使用以下依賴
<!-- SpringBoot 2.x -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid-spring-boot-starter.version}</version>
</dependency>如果是SpringBoot 3.x,使用以下依賴
<!-- SpringBoot 3.x -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-3-starter</artifactId>
<version>${druid-spring-boot-starter.version}</version>
</dependency>application.yml配置
為了方便演示和直觀,配置文件拆分成2個(gè),application.yml和application-druid.yml
application.yml
spring:
profiles:
active: druid
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:tcp://localhost/D:/ProgramFiles/h2database/data/test;MODE=MYSQL;
username:
password:application-druid.yml配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
# Druid的其他屬性配置
druid:
# 初始化時(shí)建立物理連接的個(gè)數(shù)
initial-size: 5
# 連接池的最小空閑數(shù)量
min-idle: 5
# 連接池最大連接數(shù)量
max-active: 20
# 獲取連接時(shí)最大等待時(shí)間,單位毫秒
max-wait: 60000
# 申請連接的時(shí)候檢測,如果空閑時(shí)間大于timeBetweenEvictionRunsMillis,執(zhí)行validationQuery檢測連接是否有效。
test-while-idle: true
# 既作為檢測的間隔時(shí)間又作為testWhileIdel執(zhí)行的依據(jù)
time-between-eviction-runs-millis: 60000
# 銷毀線程時(shí)檢測當(dāng)前連接的最后活動(dòng)時(shí)間和當(dāng)前時(shí)間差大于該值時(shí),關(guān)閉當(dāng)前連接(配置連接在池中的最小生存時(shí)間)
min-evictable-idle-time-millis: 30000
# 用來檢測數(shù)據(jù)庫連接是否有效的sql 必須是一個(gè)查詢語句(oracle中為 select 1 from dual)
validation-query: select 'x'
# 申請連接時(shí)會(huì)執(zhí)行validationQuery檢測連接是否有效,開啟會(huì)降低性能,默認(rèn)為true
test-on-borrow: false
# 歸還連接時(shí)會(huì)執(zhí)行validationQuery檢測連接是否有效,開啟會(huì)降低性能,默認(rèn)為true
test-on-return: false
# 是否緩存preparedStatement, 也就是PSCache,PSCache對支持游標(biāo)的數(shù)據(jù)庫性能提升巨大,比如說oracle,在mysql下建議關(guān)閉。
pool-prepared-statements: false
# 置監(jiān)控統(tǒng)計(jì)攔截的filters,去掉后監(jiān)控界面sql無法統(tǒng)計(jì),stat: 監(jiān)控統(tǒng)計(jì)、Slf4j:日志記錄、waLL: 防御sqL注入
filters: stat,wall,slf4j
# 要啟用PSCache,必須配置大于0,當(dāng)大于0時(shí),poolPreparedStatements自動(dòng)觸發(fā)修改為true。在Druid中,不會(huì)存在Oracle下PSCache占用內(nèi)存過多的問題,可以把這個(gè)數(shù)值配置大一些,比如說100
max-pool-prepared-statement-per-connection-size: -1
# 合并多個(gè)DruidDataSource的監(jiān)控?cái)?shù)據(jù)
use-global-data-source-stat: true
# 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄
connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
web-stat-filter:
# 是否啟用StatFilter默認(rèn)值true
enabled: true
# 添加過濾規(guī)則
url-pattern: /*
# 忽略過濾的格式
exclusions: /druid/*,*.js,*.gif,*.jpg,*.png,*.css,*.ico
stat-view-servlet:
# 是否啟用StatViewServlet默認(rèn)值true
enabled: true
# 訪問路徑為/druid時(shí),跳轉(zhuǎn)到StatViewServlet
url-pattern: /druid/*
# 是否能夠重置數(shù)據(jù)
reset-enable: false
# 需要賬號密碼才能訪問控制臺,默認(rèn)為root
login-username: druid
login-password: druid
# IP白名單
allow: 127.0.0.1
# IP黑名單(共同存在時(shí),deny優(yōu)先于allow)
deny:集成過程出現(xiàn)的問題
由于本文使用SpringBoot 3.x版本,啟動(dòng)后,在瀏覽器輸入
http://localhost:8080/druid
- 但會(huì)報(bào)404的錯(cuò)誤,首先要確保
pom.xml引用的是druid-spring-boot-3-starter而不是druid-spring-boot-starter- 通過源碼分析,
druid-spring-boot-3-starter目前最新版本是1.2.18,雖然適配了SpringBoot3,但缺少自動(dòng)裝配的配置文件,需要手動(dòng)在resources目錄下創(chuàng)建META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports,文件內(nèi)容如下
com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure
- 本來想針對這個(gè)問題提個(gè)
issue和PR,無奈github在國內(nèi)訪問太不穩(wěn)定了
瀏覽器訪問
- 在瀏覽器輸入:
http://localhost:8080/druid - 登錄賬號密碼是配置文件中指定的:
druid/druid

在線文檔
- 官網(wǎng):
https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
到此這篇關(guān)于SpringBoot 3.x使用starter整合Druid的文章就介紹到這了,更多相關(guān)springboot starter整合druid內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java普通類調(diào)用mapper或者service方法詳解
本文介紹了兩種調(diào)用或獲取Spring Bean的方法:一種是直接使用Test.select(1);另一種是通過自定義SpringUtil工具類實(shí)現(xiàn)對Spring Bean的獲取和管理,從而簡化在項(xiàng)目中的Bean調(diào)用流程2025-10-10
SpringBoot通過token實(shí)現(xiàn)用戶互踢功能(具體實(shí)現(xiàn))
所謂token,既用戶能夠在一定時(shí)間內(nèi)證明自己身份的一長串字符串,這篇文章主要介紹了SpringBoot通過token實(shí)現(xiàn)用戶互踢功能,需要的朋友可以參考下2024-04-04
Java 中的 CompletableFuture如何讓異步編程變得簡單
CompletableFuture是Java 8引入的異步編程神器,它提供了強(qiáng)大的鏈?zhǔn)讲僮?、任?wù)組合和異常處理功能,使得異步編程變得簡單優(yōu)雅,本文給大家介紹Java中的CompletableFuture如何讓異步編程變得簡單,感興趣的朋友跟隨小編一起看看吧2025-12-12
SpringBoot實(shí)現(xiàn)整合微信支付方法詳解
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)整合微信支付的過程詳解,文中的示例代碼對我們的工作或?qū)W習(xí)有一定的幫助,感興趣的小伙伴可以跟隨小編學(xué)習(xí)一下2021-12-12
在IDEA中創(chuàng)建跑得起來的Springboot項(xiàng)目
這篇文章主要介紹了在IDEA中創(chuàng)建跑得起來的Springboot項(xiàng)目的圖文教程,需要的朋友可以參考下2018-04-04
使用spring-data-jpa實(shí)現(xiàn)簡單的兩表聯(lián)查實(shí)踐
本文介紹了Spring Data JPA在Spring Boot中的配置與簡單操作,涵蓋一對多和多對一關(guān)系的處理,適合初學(xué)者學(xué)習(xí),通過配置數(shù)據(jù)源、創(chuàng)建實(shí)體類和DAO接口,實(shí)現(xiàn)基本的CRUD操作,并提供了一個(gè)簡單的示例2026-06-06
Java實(shí)現(xiàn)動(dòng)態(tài)生成GIF圖像詳解
在互聯(lián)網(wǎng)上有許多有趣的場景,其中的一種就是動(dòng)圖。這不是視頻,而是一種GIF圖像信息。本文將利用Java實(shí)現(xiàn)動(dòng)態(tài)生成GIF圖像功能,需要的可以參考一下2022-09-09

