最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot之集成Druid數(shù)據(jù)庫連接池方式

 更新時間:2026年06月04日 09:27:43   作者:飛哥|Java 教學(xué)專家  
這篇文章主要介紹了SpringBoot之集成Druid數(shù)據(jù)庫連接池方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

前言

在軟件系統(tǒng)中都會使用到數(shù)據(jù)庫,是開發(fā)中大型系統(tǒng)不可缺少的。但如果對數(shù)據(jù)庫資源沒有很好地管理,往往會直接導(dǎo)致系統(tǒng)的穩(wěn)定。隨著系統(tǒng)流量、用戶的增加,會逐步顯露。

使用數(shù)據(jù)庫連接池可以更好、更高效的管理數(shù)據(jù)庫連接資源,我們可以直接使用第三方服務(wù),不必自己思索數(shù)據(jù)庫連接的管理。

數(shù)據(jù)庫連接池技術(shù)有:DBCP 、tomcat-jdbc、C3P0、HikariCP、Druid 等。

優(yōu)先推薦 Druid。它作為國貨,更加符合國人的思維,功能豐富,還經(jīng)歷了千錘百煉。

一、數(shù)據(jù)庫連接池

數(shù)據(jù)庫連接是一種關(guān)鍵的有限的昂貴的資源,這一點(diǎn)在多用戶的網(wǎng)頁應(yīng)用程序中體現(xiàn)得尤為突出。對數(shù)據(jù)庫連接的管理能顯著影響到整個應(yīng)用程序的伸縮性和健壯性,影響到程序的性能指標(biāo)。數(shù)據(jù)庫連接池正是針對這個問題提出來的。

數(shù)據(jù)庫連接池負(fù)責(zé)分配、管理和釋放數(shù)據(jù)庫連接,它允許應(yīng)用程序重復(fù)使用一個現(xiàn)有的數(shù)據(jù)庫連接,而不是再重新建立一個;釋放空閑時間超過最大空閑時間的數(shù)據(jù)庫連接來避免因?yàn)闆]有釋放數(shù)據(jù)庫連接而引起的數(shù)據(jù)庫連接遺漏。這項(xiàng)技術(shù)能明顯提高對數(shù)據(jù)庫操作的性能。

數(shù)據(jù)庫連接池優(yōu)點(diǎn):

  • 資源重用
  • 更快的系統(tǒng)響應(yīng)速度
  • 高效資源分配手段
  • 統(tǒng)一的連接管理,避免數(shù)據(jù)庫連接泄漏

二、SpringBoot數(shù)據(jù)庫連接池

SpringBoot 2.2.6 文檔說明:

  1. 由于 HikariCP 的性能和并發(fā)性。如果有 HikariCP,SpringBoot 會選擇它。
  2. 否則,如果 Tomcat數(shù)據(jù)源連接池 可用,也可以使用它。
  3. 如果 HikariCPTomcat數(shù)據(jù)源連接池 都不可用,并且如果 Commons DBCP2 可用,就使用它。

可以使用 spring.datasource.type 屬性來指定要使用的連接池。

如果使用 spring-boot-starter-jdbcspring-boot-starter-data-jpa,將自動獲得對 HikariCP 的依賴。

三、Druid數(shù)據(jù)庫連接池

Druid 連接池是阿里巴巴開源的數(shù)據(jù)庫連接池項(xiàng)目(阿里巴巴數(shù)據(jù)庫事業(yè)部出品)。Druid 連接池為監(jiān)控而生,內(nèi)置強(qiáng)大的監(jiān)控功能,監(jiān)控特性不影響性能。功能強(qiáng)大,能防 SQL注入,內(nèi)置 Loging 能診斷 Hack 應(yīng)用行為。

Druid 是一個 JDBC 組件庫,包含數(shù)據(jù)庫連接池、SQL Parser 等組件, 被大量業(yè)務(wù)和技術(shù)產(chǎn)品使用或集成,經(jīng)歷過最嚴(yán)苛線上業(yè)務(wù)場景考驗(yàn)。是 Java 語言中最好的數(shù)據(jù)庫連接池。

官方提供對比:Druid 連接池在性能、監(jiān)控、診斷、安全、擴(kuò)展性這些方面遠(yuǎn)遠(yuǎn)超出競品。

功能類別功能DruidHikariCPDBCPTomcat-jdbcC3P0
性能PSCache
LRU
SLB負(fù)載均衡支持
穩(wěn)定性ExceptionSorter
擴(kuò)展擴(kuò)展FilterJdbcIntercepter
監(jiān)控監(jiān)控方式jmx/log/httpjmx/metricsjmxjmxjmx
支持SQL級監(jiān)控
Spring/Web關(guān)聯(lián)監(jiān)控
診斷支持LogFilter
連接泄露診斷logAbandoned
安全SQL防注入
支持配置加密

四、SpringBoot集成Druid

1.環(huán)境說明

  • 開發(fā)工具:IDEA 2019.3.1
  • 框架版本:SpringBoot 2.2.6
  • 數(shù)據(jù)庫:MySql 8.0.19
  • 數(shù)據(jù)庫連接池:Druid 1.1.9

2.集成步驟

(1)添加maven依賴

<!-- Druid 數(shù)據(jù)庫連接池 -->
<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid-spring-boot-starter</artifactId>
   <version>1.1.9</version>
</dependency>

(2)Druid配置

application.properties文件

# ======================================== Druid 配置 ========================================= #
# 要使用的連接池實(shí)現(xiàn)的全限定名。默認(rèn)情況下,它是從類路徑自動檢測到的。
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# JDBC配置:
# JDBC驅(qū)動程序的完全限定名。默認(rèn)情況下基于URL自動檢測
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
# 數(shù)據(jù)庫的JDBC URL
spring.datasource.druid.url=jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&allowPublicKeyRetrieval=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
# 數(shù)據(jù)庫登錄用戶名
spring.datasource.druid.username=root
# 數(shù)據(jù)庫登錄密碼
spring.datasource.druid.password=root
# 連接池配置:
# 初始化時建立物理連接的個數(shù)
spring.datasource.druid.initial-size=2
# 最大連接池?cái)?shù)量
spring.datasource.druid.max-active=10
# 最小連接池?cái)?shù)量
spring.datasource.druid.min-idle=2
# 屬性類型是字符串,通過別名的方式配置擴(kuò)展插件,配置多個英文逗號分隔。
# 常用的插件有:監(jiān)控統(tǒng)計(jì)用的filter:stat,日志用的filter:log4j,防御sql注入的filter:wall
spring.datasource.druid.filters=stat,wall
# 監(jiān)控配置:
# WebStatFilter配置
# 是否啟用StatFilter默認(rèn)值false
spring.datasource.druid.web-stat-filter.enabled=true
spring.datasource.druid.web-stat-filter.url-pattern=/*
# 排除不必要的url
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.jpg,*.css,*.ico,/druid/*
# 是否開啟session統(tǒng)計(jì)功能
spring.datasource.druid.web-stat-filter.session-stat-enable=true
# session最大數(shù),缺省sessionStatMaxCount是1000個
spring.datasource.druid.web-stat-filter.session-stat-max-count=500
# 用戶user信息保存在session中的sessionName,druid能夠知道當(dāng)前的session用戶
spring.datasource.druid.web-stat-filter.principal-session-name=web_user
# 用戶user信息保存在cookie 中的cookieName,druid能夠知道當(dāng)前的用戶
#spring.datasource.druid.web-stat-filter.principal-cookie-name=
# 監(jiān)控單個url調(diào)用的sql列表
spring.datasource.druid.web-stat-filter.profile-enable=true
# StatViewServlet配置
# 是否啟用StatViewServlet(監(jiān)控頁面)默認(rèn)值為false(考慮到安全問題默認(rèn)并未啟動,如需啟用建議設(shè)置密碼或白名單以保障安全)
spring.datasource.druid.stat-view-servlet.enabled=true
# 訪問url模式
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
# 是否允許清空統(tǒng)計(jì)數(shù)據(jù)
spring.datasource.druid.stat-view-servlet.reset-enable=true
# 監(jiān)控頁面訪問用戶名
spring.datasource.druid.stat-view-servlet.login-username=admin
# 監(jiān)控頁面訪問密碼
spring.datasource.druid.stat-view-servlet.login-password=admin
# -訪問控制:
#   -deny優(yōu)先于allow,如果在deny列表中,就算在allow列表中,也會被拒絕。
#   -如果allow沒有配置或者為空,則允許所有訪問)
#   -由于匹配規(guī)則不支持IPV6,配置了allow或者deny之后,會導(dǎo)致IPV6無法訪問
# 訪問控制,白名單IP
#spring.datasource.druid.stat-view-servlet.allow=
# 訪問控制,黑名單IP
#spring.datasource.druid.stat-view-servlet.deny=
# Spring監(jiān)控配置
# Spring監(jiān)控AOP切入點(diǎn),如x.y.z.service.*,配置多個英文逗號分隔
#spring.datasource.druid.aop-patterns=
# ======================================== Druid 配置 結(jié)束 ========================================= #

DruidDataSource 配置屬性列表

DruidDataSource 配置兼容 DBCP,但個別配置的語意有所區(qū)別。

配置缺省值說明
name配置這個屬性的意義在于,如果存在多個數(shù)據(jù)源,監(jiān)控的時候可以通過名字來區(qū)分開來。如果沒有配置,將會生成一個名字,格式是:"DataSource-" + System.identityHashCode(this). 另外配置此屬性至少在1.0.5版本中是不起作用的,強(qiáng)行設(shè)置name會出錯。
url連接數(shù)據(jù)庫的url,不同數(shù)據(jù)庫不一樣。例如: mysql : jdbc:mysql://10.20.153.104:3306/druid2 oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnauto
username連接數(shù)據(jù)庫的用戶名
password連接數(shù)據(jù)庫的密碼。如果你不希望密碼直接寫在配置文件中,可以使用ConfigFilter。
driverClassName根據(jù)url自動識別這一項(xiàng)可配可不配,如果不配置druid會根據(jù)url自動識別dbType,然后選擇相應(yīng)的driverClassName
initialSize0初始化時建立物理連接的個數(shù)。初始化發(fā)生在顯示調(diào)用init方法,或者第一次getConnection時
maxActive8最大連接池?cái)?shù)量
minIdle最小連接池?cái)?shù)量
maxWait獲取連接時最大等待時間,單位毫秒。配置了maxWait之后,缺省啟用公平鎖,并發(fā)效率會有所下降,如果需要可以通過配置useUnfairLock屬性為true使用非公平鎖。
poolPreparedStatementsfalse是否緩存preparedStatement,也就是PSCache。PSCache對支持游標(biāo)的數(shù)據(jù)庫性能提升巨大,比如說oracle。在mysql下建議關(guān)閉。
maxPoolPreparedStatementPerConnectionSize-1要啟用PSCache,必須配置大于0,當(dāng)大于0時,poolPreparedStatements自動觸發(fā)修改為true。在Druid中,不會存在Oracle下PSCache占用內(nèi)存過多的問題,可以把這個數(shù)值配置大一些,比如說100
validationQuery用來檢測連接是否有效的sql,要求是一個查詢語句,常用select 'x'。如果validationQuery為null,testOnBorrow、testOnReturn、testWhileIdle都不會起作用。
validationQueryTimeout單位:秒,檢測連接是否有效的超時時間。底層調(diào)用jdbc Statement對象的void setQueryTimeout(int seconds)方法
testOnBorrowtrue申請連接時執(zhí)行validationQuery檢測連接是否有效,做了這個配置會降低性能。
testOnReturnfalse歸還連接時執(zhí)行validationQuery檢測連接是否有效,做了這個配置會降低性能。
testWhileIdlefalse建議配置為true,不影響性能,并且保證安全性。申請連接的時候檢測,如果空閑時間大于timeBetweenEvictionRunsMillis,執(zhí)行validationQuery檢測連接是否有效。
keepAlivefalse(1.0.28)連接池中的minIdle數(shù)量以內(nèi)的連接,空閑時間超過minEvictableIdleTimeMillis,則會執(zhí)行keepAlive操作。
timeBetweenEvictionRunsMillis1分鐘(1.0.14)有兩個含義:1) Destroy線程會檢測連接的間隔時間,如果連接空閑時間大于等于minEvictableIdleTimeMillis則關(guān)閉物理連接。2) testWhileIdle的判斷依據(jù),詳細(xì)看testWhileIdle屬性的說明
minEvictableIdleTimeMillis連接保持空閑而不被驅(qū)逐的最小時間
connectionInitSqls物理連接初始化的時候執(zhí)行的sql
exceptionSorter根據(jù)dbType自動識別當(dāng)數(shù)據(jù)庫拋出一些不可恢復(fù)的異常時,拋棄連接
filters屬性類型是字符串,通過別名的方式配置擴(kuò)展插件,常用的插件有:監(jiān)控統(tǒng)計(jì)用的filter:stat日志用的filter:log4j防御sql注入的filter:wall
proxyFilters類型是List<com.alibaba.druid.filter.Filter>,如果同時配置了filters和proxyFilters,是組合關(guān)系,并非替換關(guān)系

(3)監(jiān)控頁面

Druid 內(nèi)置提供了一個 StatViewServlet 用于展示 Druid 的統(tǒng)計(jì)信息。

這個 StatViewServlet 的用途包括:

  • 提供監(jiān)控信息展示的 html 頁面
  • 提供監(jiān)控信息的 JSON API

輸入 http://127.0.0.1:8080/demo/druid 進(jìn)入 Druid 監(jiān)控登錄頁面,輸入配置中的用戶名和密碼。

進(jìn)入到 Druid 監(jiān)控頁面,可以看到非常全面的系統(tǒng)監(jiān)控?cái)?shù)據(jù)。

總結(jié)

目前只是 SpringBoot 集成了 Druid 連接池,并可以進(jìn)入監(jiān)控頁面進(jìn)行查看相關(guān)監(jiān)控?cái)?shù)據(jù)。后期可以將監(jiān)控頁面嵌入到系統(tǒng)中,或是直接獲取監(jiān)控?cái)?shù)據(jù)自行展示。

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • idea啟動vue項(xiàng)目教程

    idea啟動vue項(xiàng)目教程

    文章介紹了在IDEA中安裝Node.js和配置Vue.js插件的步驟,,首先,從Node.js官網(wǎng)下載并安裝LTS版本;然后,在打開終端驗(yàn)證安裝結(jié)果;接著,在IDEA中配置Node.js解釋器并重啟;最后,在配置運(yùn)行方式,設(shè)置Command和Scripts,保存后點(diǎn)擊綠色三角啟動
    2026-05-05
  • Eclipse在線安裝hibernate插件

    Eclipse在線安裝hibernate插件

    這篇文章主要介紹了Eclipse在線安裝hibernate插件,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • Java無界阻塞隊(duì)列DelayQueue詳細(xì)解析

    Java無界阻塞隊(duì)列DelayQueue詳細(xì)解析

    這篇文章主要介紹了Java無界阻塞隊(duì)列DelayQueue詳細(xì)解析,DelayQueue是一個支持時延獲取元素的無界阻塞隊(duì)列,隊(duì)列使用PriorityQueue來實(shí)現(xiàn),隊(duì)列中的元素必須實(shí)現(xiàn)Delayed接口,在創(chuàng)建元素時可以指定多久才能從隊(duì)列中獲取當(dāng)前元素,需要的朋友可以參考下
    2023-12-12
  • Spring?Security權(quán)限控制的實(shí)現(xiàn)接口

    Spring?Security權(quán)限控制的實(shí)現(xiàn)接口

    這篇文章主要介紹了Spring?Security的很多功能,在這些眾多功能中,我們知道其核心功能其實(shí)就是認(rèn)證+授權(quán)。Spring教程之Spring?Security的四種權(quán)限控制方式
    2023-03-03
  • SpringBoot讀取excel表格的示例代碼

    SpringBoot讀取excel表格的示例代碼

    這篇文章主要介紹了SpringBoot讀取excel表格的示例代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • 玩轉(zhuǎn)spring boot MVC應(yīng)用(2)

    玩轉(zhuǎn)spring boot MVC應(yīng)用(2)

    玩轉(zhuǎn)spring boot,如何快速搭建一個MCV程序?這篇文章為大家詳細(xì)主要介紹了一個MCV程序的快速搭建過程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • 在Struts2中如何將父類屬性序列化為JSON格式的解決方法

    在Struts2中如何將父類屬性序列化為JSON格式的解決方法

    本篇文章,小編將為大家介紹關(guān)于在Struts2中如何將父類屬性序列化為JSON格式的解決方法,有需要的朋友可以參考一下
    2013-04-04
  • 淺談使用Java Web獲取客戶端真實(shí)IP的方法示例詳解

    淺談使用Java Web獲取客戶端真實(shí)IP的方法示例詳解

    這篇文章主要介紹了使用Java-Web獲取客戶端真實(shí)IP的方法示例詳解。一般我們無法獲取客戶端真實(shí)IP,原因是:當(dāng)我們通過request獲取客戶端IP時,自身服務(wù)器通常會為了保護(hù)信息或者負(fù)載均衡的目的,對自身服務(wù)器做反向代理。對此感興趣可以了解一下
    2020-07-07
  • 老生常談比較排序之堆排序

    老生常談比較排序之堆排序

    下面小編就為大家?guī)硪黄仙U劚容^排序之堆排序。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • 利用java生成二維碼工具類示例代碼

    利用java生成二維碼工具類示例代碼

    二維碼對現(xiàn)在的人們來說再熟悉不過了,我們在開發(fā)的時候也經(jīng)常會用到二維碼,下面這篇文章主要給大家介紹了關(guān)于利用java生成二維碼工具類的相關(guān)資料,文中給了詳細(xì)的示例代碼,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09

最新評論

会东县| 建水县| 称多县| 楚雄市| 鹤壁市| 鹰潭市| 涞源县| 淳化县| 五台县| 蕉岭县| 徐汇区| 庆云县| 永嘉县| 贞丰县| 青浦区| 和政县| 长兴县| 龙陵县| 白河县| 阿拉善盟| 武城县| 新巴尔虎左旗| 女性| 双鸭山市| 邹城市| 永善县| 于田县| 泰州市| 昌平区| 通河县| 郧西县| 门源| 渝北区| 东港市| 丰台区| 大埔县| 濮阳县| 东海县| 京山县| 井研县| 长宁县|