Spring Boot 使用 Druid 連接池詳解
Alibaba Druid 是一個(gè) JDBC 組件庫,包含數(shù)據(jù)庫連接池、SQL Parser 等組件,被大量業(yè)務(wù)和技術(shù)產(chǎn)品使用或集成,經(jīng)歷過嚴(yán)苛的線上業(yè)務(wù)場景考驗(yàn),是值得信賴的技術(shù)產(chǎn)品。Druid Spring Boot Starter 用于幫助你在 Spring Boot 項(xiàng)目中輕松集成 Druid 數(shù)據(jù)庫連接池和監(jiān)控。
https://github.com/alibaba/druid
快速使用
1)在你的 Spring Boot 項(xiàng)目中添加依賴配置:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.14</version>
</dependency>
2)添加數(shù)據(jù)源配置:
## Spring DruidDataSource Configuration
# spring.datasource.druid.enable=true
# spring.datasource.druid.name=DataSource-1
# spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.url=jdbc:mysql://localhost:3306/dbname?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&autoReconnectForPools=true&noAccessToProcedureBodies=true&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull
spring.datasource.druid.username=root
spring.datasource.druid.password=123456
spring.datasource.druid.initial-size=10
spring.datasource.druid.min-idle=10
spring.datasource.druid.max-active=100
spring.datasource.druid.max-wait=6000
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
spring.datasource.druid.validation-query=select 1
spring.datasource.druid.time-between-eviction-runs-millis=30000
spring.datasource.druid.min-evictable-idle-time-millis=600000
spring.datasource.druid.max-evictable-idle-time-millis=900000
spring.datasource.druid.keep-alive=true
3)Druid 支持根據(jù) url 來自動探測 JDBC 驅(qū)動, 已在 druid-xxx.jar/META-INF/druid-driver.properties
屬性文件中定義。
jdbc:derby:=org.apache.derby.jdbc.EmbeddedDriver
jdbc:mysql:=com.mysql.jdbc.Driver
jdbc:log4jdbc:=net.sf.log4jdbc.DriverSpy
jdbc:oracle:=oracle.jdbc.driver.OracleDriver
jdbc:microsoft:=com.microsoft.jdbc.sqlserver.SQLServerDriver
jdbc:jtds:=net.sourceforge.jtds.jdbc.Driver
jdbc:postgresql:=org.postgresql.Driver
jdbc:fake:=com.alibaba.druid.mock.MockDriver
jdbc:hsqldb:=org.hsqldb.jdbcDriver
jdbc:db2:=COM.ibm.db2.jdbc.app.DB2Driver
jdbc:sqlite:=org.sqlite.JDBC
jdbc:ingres:=com.ingres.jdbc.IngresDriver
jdbc:h2:=org.h2.Driver
jdbc:mckoi:=com.mckoi.JDBCDriver
jdbc:clickhouse:=ru.yandex.clickhouse.ClickHouseDriver
jdbc:highgo:=com.highgo.jdbc.Driver
如果未能自動探測 JDBC 驅(qū)動,則需指定驅(qū)動類:
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
連接池配置詳解
Druid Spring Boot Starter 配置屬性的名稱完全遵照 Druid,你可以通過 Spring Boot 配置文件來配置 Druid 數(shù)據(jù)庫連接池和監(jiān)控。
- JDBC 配置:
# 單數(shù)據(jù)源時(shí),Druid 兼容 JDBC 的配置如下:
spring.datasource.druid.url= # 或spring.datasource.url=
spring.datasource.druid.username= # 或spring.datasource.username=
spring.datasource.druid.password= # 或spring.datasource.password=
spring.datasource.druid.driver-class-name= #或 spring.datasource.driver-class-name=
- 連接池配置詳解:
# 啟動 Druid 連接池,默認(rèn)開啟
# 多數(shù)據(jù)源配置時(shí),該參數(shù)不生效
spring.datasource.druid.enable=true
# 指定驅(qū)動類名,默認(rèn)從 URL 中自動探測
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
# 設(shè)置數(shù)據(jù)庫連接
spring.datasource.druid.url=jdbc:mysql://localhost:3306/dbname
# 設(shè)置數(shù)據(jù)庫用戶名
spring.datasource.druid.username=root
# 設(shè)置數(shù)據(jù)庫密碼
spring.datasource.druid.password=123456
# 允許訪問底層連接,默認(rèn)值:true
spring.datasource.druid.access-to-underlying-connection-allowed=true
# 啟用異步關(guān)閉連接,默認(rèn)值:false
# 如果 removeAbandoned = true,則自動開啟。
spring.datasource.druid.async-close-connection-enable=false
# 開啟異步初始化,默認(rèn)值:false
spring.datasource.druid.async-init=false
# 失敗后跳過即用于失敗重連,默認(rèn)值:false
# true 表示向數(shù)據(jù)庫請求連接失敗后,就算后端數(shù)據(jù)庫恢復(fù)正常也不進(jìn)行重連,因此一定要配置 false
spring.datasource.druid.break-after-acquire-failure=false
# 檢查SQL執(zhí)行時(shí)間,默認(rèn)值:false
spring.datasource.druid.check-execute-time=false
# 啟動清除過濾器,默認(rèn)值:true
spring.datasource.druid.clear-filters-enable=true
# 連接屬性配置,多個(gè)用英文分號隔開
spring.datasource.druid.connect-properties=
# 連接出錯(cuò)嘗試幾次重新連接,默認(rèn)值:1
spring.datasource.druid.connection-error-retry-attempts=1
# 指定數(shù)據(jù)庫類型,默認(rèn)自動探測
spring.datasource.druid.db-type=
# 事務(wù)是否自動提交,默認(rèn)值:true
spring.datasource.druid.default-auto-commit=true
# 指定連接默認(rèn)的 catalog,默認(rèn)未設(shè)置
spring.datasource.druid.default-catalog=
# 是否設(shè)置默認(rèn)連接只讀,默認(rèn)未設(shè)置
spring.datasource.druid.default-read-only=true
# 指定連接的事務(wù)的默認(rèn)隔離級別,默認(rèn)未設(shè)置。
# -1 數(shù)據(jù)庫默認(rèn)隔離級別
# 1 未提交讀
# 2 讀寫提交
# 4 可重復(fù)讀
# 8 串行化
spring.datasource.druid.default-transaction-isolation=
# 當(dāng)創(chuàng)建連接池時(shí),創(chuàng)建失敗后是否立即拋異常,默認(rèn)值:false
spring.datasource.druid.fail-fast=false
# 設(shè)置過濾器別名,多個(gè)使用英文逗號隔開,默認(rèn)值:default
# 生產(chǎn)環(huán)境不建議使用其他過濾器。
spring.datasource.druid.filters=stat
# 初始化異常則拋出異常,默認(rèn)值:true
spring.datasource.druid.init-exception-throw=true
# 初始化全局變量,默認(rèn)值:false
spring.datasource.druid.init-global-variants=false
# 初始化變量,默認(rèn)值:false
spring.datasource.druid.init-variants=false
# 初始化連接池大小,默認(rèn)值:0
# 建議與 minIdle 大小保持一致
spring.datasource.druid.initial-size=10
# 開啟 keepAlive 操作,默認(rèn)值:false
# 打開 keepAlive 之后的效果
# 1、初始化連接池時(shí)會填充到 minIdle 數(shù)量。
# 2、連接池中的 minIdle 數(shù)量以內(nèi)的連接,空閑時(shí)間超過 minEvictableIdleTimeMillis,則會執(zhí)行 keepAlive 操作。
# 3、當(dāng)網(wǎng)絡(luò)斷開等原因產(chǎn)生的由 ExceptionSorter 檢測出來的死連接被清除后,自動補(bǔ)充連接到 minIdle 數(shù)量。
spring.datasource.druid.keep-alive=true
# 兩次 keepAlive 操作的時(shí)間間隔,默認(rèn)值:120000(單位毫秒)
spring.datasource.druid.keep-alive-between-time-millis=120000
# 指定連接數(shù)據(jù)庫的超時(shí)時(shí)間,默認(rèn)無限制(單位秒)
spring.datasource.druid.login-timeout=
# 設(shè)置最大連接數(shù),默認(rèn)值:8
spring.datasource.druid.max-active=100
# 最大創(chuàng)建任務(wù)數(shù),默認(rèn)值:3
spring.datasource.druid.max-create-task-count=3
# 連接保持空閑而不被驅(qū)逐的最大時(shí)間,默認(rèn)值:1800000毫秒=30分鐘
spring.datasource.druid.max-evictable-idle-time-millis=1800000
# 最大打開的 prepared-statement 數(shù)量,默認(rèn)值:-1(無限制)
spring.datasource.druid.max-open-prepared-statements=-1
# 設(shè)置最大等待時(shí)間,默認(rèn)值:-1(單位毫秒)
spring.datasource.druid.max-wait=6000
# 允許的最大線程等待數(shù),默認(rèn)值:-1(無限制)
spring.datasource.druid.max-wait-thread-count=-1
# 銷毀線程時(shí)檢測當(dāng)前連接的最后活動時(shí)間和當(dāng)前時(shí)間差大于該值時(shí),關(guān)閉當(dāng)前連接即一個(gè)連接在池中最小生存的時(shí)間。默認(rèn)值:1800000毫秒=30分鐘
spring.datasource.druid.min-evictable-idle-time-millis=1800000
# 設(shè)置最小連接數(shù),默認(rèn)值:0
spring.datasource.druid.min-idle=10
# 指定連接池名稱,未設(shè)置則隨機(jī)生成:`"DataSource-" + System.identityHashCode(this);`
spring.datasource.druid.name=DataSource-1
# 設(shè)置獲取連接時(shí)的重試次數(shù),默認(rèn)值:0
spring.datasource.druid.not-full-timeout-retry-count=0
# 用于控制當(dāng) OnFatalError 發(fā)生時(shí)最大使用連接數(shù)量,用于控制異常發(fā)生時(shí)并發(fā)執(zhí)行SQL的數(shù)量,減輕數(shù)據(jù)庫恢復(fù)的壓力。默認(rèn)值:0
spring.datasource.druid.on-fatal-error-max-active=0
# 是否是 Oracle 數(shù)據(jù)庫,默認(rèn)值:false
spring.datasource.druid.oracle=false
# 物理最大連接數(shù),默認(rèn)值:-1(無限制)
spring.datasource.druid.phy-max-use-count=-1
# 物理超時(shí)時(shí)間,默認(rèn)值:-1(無限制,單位毫秒)
spring.datasource.druid.phy-timeout-millis=-1
# oracle 設(shè)為 true,mysql 設(shè)為 false。分庫分表較多推薦設(shè)置為 false,默認(rèn)值:false
spring.datasource.druid.pool-prepared-statements=false
# 打開PSCache,并且指定每個(gè)連接上PSCache的大小,默認(rèn)值:10
# poolPreparedStatements 默認(rèn)為 false,屬性文件中將 poolPreparedStatements 設(shè)置為 true,則該值生效。
# 若屬性文件中設(shè)置該值且大于0時(shí),poolPreparedStatements 會自動設(shè)置為 true。
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=10
# 查詢超時(shí)時(shí)間,默認(rèn)值:0(無限制,單位秒)
spring.datasource.druid.query-timeout=0
# 指定當(dāng)連接超過廢棄超時(shí)時(shí)間時(shí),是否立刻刪除該連接,默認(rèn)值:false
spring.datasource.druid.remove-abandoned=false
# 廢棄連接超時(shí)指定時(shí)間的連接,默認(rèn)值:5分鐘
spring.datasource.druid.remove-abandoned-timeout-millis=300 * 1000
# 共享預(yù)處理語句,默認(rèn)值:false
spring.datasource.druid.share-prepared-statements=false
# 從連接池借用連接時(shí),是否測試該連接,默認(rèn)值:false
spring.datasource.druid.test-on-borrow=false
# 申請連接時(shí)檢測,如果空閑時(shí)間大于 timeBetweenEvictionRunsMillis,執(zhí)行 validationQuery 檢測連接是否有效。默認(rèn)值:false
spring.datasource.druid.test-on-return=false
# 歸還連接時(shí)會執(zhí)行 validationQuery 檢測連接是否有效,默認(rèn)值:true
spring.datasource.druid.test-while-idle=true
# 指定兩次錯(cuò)誤連接的最大時(shí)間間隔,默認(rèn)值:500毫秒
spring.datasource.druid.time-between-connect-error-millis=500
# 既作為檢測的間隔時(shí)間又作為 testWhileIdel 執(zhí)行的依據(jù)即此值決定是否空閑,因此此值一定要設(shè)置合理。
# 即一個(gè)空閑線程,最大的生成時(shí)間,檢測需要關(guān)閉的空閑連接。默認(rèn)值:60000毫秒
spring.datasource.druid.time-between-eviction-runs-millis=30000
# 事務(wù)查詢超時(shí)時(shí)間,默認(rèn)值:0(小于或等于 0 時(shí)取 query-timeout 的值)
spring.datasource.druid.transaction-query-timeout=0
# 事務(wù)時(shí)間閾值,默認(rèn)值:0(單位毫秒)
spring.datasource.druid.transaction-threshold-millis=0
# 使用非公平鎖,默認(rèn)未設(shè)置
spring.datasource.druid.use-unfair-lock=true
# 使用 Oracle 隱式緩存,默認(rèn)值:true
spring.datasource.druid.use-oracle-implicit-cache=true
# 指定連接的有效檢查類,默認(rèn)未設(shè)置
spring.datasource.druid.valid-connection-checker=
# 用來檢測連接是否有效的 SQL 必須是一個(gè)查詢語句,默認(rèn)未設(shè)
spring.datasource.druid.validation-query=select 1
# 檢測連接是否有效的超時(shí)時(shí)間,默認(rèn)值:-1(單位秒)
spring.datasource.druid.validation-query-timeout=-1
過濾器配置
Druid 內(nèi)置的過濾器類及別名,已在 druid-xxx.jar/META-INF/druid-filter.properties
屬性文件中定義:
druid.filters.default=com.alibaba.druid.filter.stat.StatFilter
druid.filters.stat=com.alibaba.druid.filter.stat.StatFilter
druid.filters.mergeStat=com.alibaba.druid.filter.stat.MergeStatFilter
druid.filters.counter=com.alibaba.druid.filter.stat.StatFilter
druid.filters.encoding=com.alibaba.druid.filter.encoding.EncodingConvertFilter
druid.filters.log4j=com.alibaba.druid.filter.logging.Log4jFilter
druid.filters.log4j2=com.alibaba.druid.filter.logging.Log4j2Filter
druid.filters.slf4j=com.alibaba.druid.filter.logging.Slf4jLogFilter
druid.filters.commonlogging=com.alibaba.druid.filter.logging.CommonsLogFilter
druid.filters.commonLogging=com.alibaba.druid.filter.logging.CommonsLogFilter
druid.filters.wall=com.alibaba.druid.wall.WallFilter
druid.filters.config=com.alibaba.druid.filter.config.ConfigFilter
druid.filters.haRandomValidator=com.alibaba.druid.pool.ha.selector.RandomDataSourceValidateFilter
除 StatFilter 作為默認(rèn)過濾器外,其他都為關(guān)閉狀態(tài)。配置過濾器的方法如下:
# 設(shè)置過濾器別名,多個(gè)使用英文逗號隔開,默認(rèn)值:default
# 生產(chǎn)環(huán)境不建議使用其他過濾器。
spring.datasource.druid.filters=stat
StatViewServlet
Druid 管控臺配置,考慮到安全問題默認(rèn)為關(guān)閉,如需開啟,建議設(shè)置密碼或白名單以保障安全。配置開啟后,才能打開管控臺頁面查看監(jiān)控信息。
瀏覽器訪問:http://127.0.0.1:8080/druid/index.html
## DruidStatViewServletConfiguration
# 是否開啟管控臺頁面訪問,默認(rèn)值:false
spring.datasource.druid.stat-view-servlet.enabled=true
# URL 映射路徑,默認(rèn)值:/druid/*
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
# 是否允許重置,默認(rèn)允許
# 注意:設(shè)置為 false 后,管控臺的重置按鈕并不會消失,但數(shù)據(jù)不會重置
spring.datasource.druid.stat-view-servlet.reset-enable=false
# 管控臺登錄用戶名,默認(rèn)未設(shè)置
spring.datasource.druid.stat-view-servlet.login-username=admin
# 管控臺登錄密碼,默認(rèn)未設(shè)置
spring.datasource.druid.stat-view-servlet.login-password=admin123
# 管控臺訪問白名單,默認(rèn)值:127.0.0.1
spring.datasource.druid.stat-view-servlet.allow=127.0.0.1,10.177.37.15
# 管控臺訪問黑名單,默認(rèn)未設(shè)置
spring.datasource.druid.stat-view-servlet.deny=10.177.37.14
WebStatFilter
開啟 Web 請求監(jiān)控,默認(rèn)為關(guān)閉。配置開啟后,可以在 Druid 管控臺查看 Web 請求的監(jiān)控信息。
## DruidWebStatFilterConfiguration
# 是否開啟 Web 請求的統(tǒng)計(jì),默認(rèn)值:false
spring.datasource.druid.web-stat-filter.enabled=true
# 以下參數(shù)保持默認(rèn)配置即可,生產(chǎn)環(huán)境不建議啟用
# spring.datasource.druid.web-stat-filter.url-pattern=
# spring.datasource.druid.web-stat-filter.exclusions=
# spring.datasource.druid.web-stat-filter.session-stat-enable=
# spring.datasource.druid.web-stat-filter.session-stat-max-count=
# spring.datasource.druid.web-stat-filter.principal-session-name=
# spring.datasource.druid.web-stat-filter.principal-cookie-name=
# spring.datasource.druid.web-stat-filter.profile-enable=
StatFilter
用于統(tǒng)計(jì)監(jiān)控信息,默認(rèn)開啟。
## StatFilter
# 是否開啟統(tǒng)計(jì),默認(rèn)值:true
spring.datasource.druid.filter.stat.enabled=true
# 啟動連接堆跟蹤,默認(rèn)值:false
spring.datasource.druid.filter.stat.connection-stack-trace-enable=false
# 是否在日志中打印慢SQL,默認(rèn)值:false
spring.datasource.druid.filter.stat.log-slow-sql=true
# 設(shè)置慢SQL的執(zhí)行時(shí)長,默認(rèn)值:3000毫秒
spring.datasource.druid.filter.stat.slow-sql-millis=3000
# 設(shè)置慢SQL的日志級別,默認(rèn)值:ERROR
spring.datasource.druid.filter.stat.slow-sql-log-level=ERROR
# 是否合并SQL,默認(rèn)值:false
spring.datasource.druid.filter.stat.merge-sql=false
WallFilter
這是一個(gè)特殊的過濾器,用于監(jiān)控 SQL 安全,避免 SQL 注入,默認(rèn)為關(guān)閉。在 Spring 中配置啟用 WallFilter 時(shí),需要先注入 StatFilter 開啟監(jiān)控、WallFilter
配置各種信息、WallConfig 配置攔截 SQL 的規(guī)則。
WallConfig 配置參數(shù)較多,通常情況下保持默認(rèn)配置即可。WallConfig 配置詳情文檔:https://www.cnblogs.com/soundcode/p/6483899.html
## WallFilter
# 是否開啟 SQL 監(jiān)控,默認(rèn)值:false
spring.datasource.druid.filter.wall.enabled=true
LogFilter
Druid 內(nèi)置提供了四種 LogFilter(Log4jFilter、Log4j2Filter、CommonsLogFilter、Slf4jLogFilter),用于輸出 JDBC 執(zhí)行的日志。這些
Filter 都是 Filter-Chain 擴(kuò)展機(jī)制中的
Filter,所以配置方式可以參考這里:Druid 中使用 log4j2 進(jìn)行日志輸出
盡管 Druid 支持日志過濾器,但在生產(chǎn)環(huán)境幾乎是不可能開啟日志配置的。所以,這里只作了解,實(shí)際應(yīng)用比較復(fù)雜。
# 是否開啟日志,默認(rèn)值:false
spring.datasource.druid.filter.slf4j.enabled=false
spring.datasource.druid.filter.log4j.enabled=false
spring.datasource.druid.filter.log4j2.enabled=false
spring.datasource.druid.filter.commons-log.enabled=false
EncodingConvertFilter
由于歷史原因,一些數(shù)據(jù)庫保存數(shù)據(jù)的時(shí)候使用了錯(cuò)誤編碼,需要做編碼轉(zhuǎn)換。通過 connectionProperties 來配置客戶端編碼和服務(wù)器端編碼。
# 是否開啟字符編碼轉(zhuǎn)換,默認(rèn)值:false
spring.datasource.druid.filter.encoding.enabled=true
# 指定客戶端和服務(wù)端的字符編碼
spring.datasource.druid.connection-properties=clientEncoding=UTF-8;serverEncoding=ISO-8859-1
ConfigFilter
ConfigFilter的作用包括:
- 從配置文件中讀取配置
- 從遠(yuǎn)程http文件中讀取配置
- 為數(shù)據(jù)庫密碼提供加密功能
詳情查看官方文檔:使用 ConfigFilter
# 是否開啟配置,默認(rèn)值:false
spring.datasource.druid.filter.config.enabled=true
# 密碼加密處理后,需要開啟解密
spring.datasource.druid.connection-properties=config.decrypt=true
多數(shù)據(jù)源配置
Spring Boot 2.X 版本不再支持配置繼承,多數(shù)據(jù)源的話每個(gè)數(shù)據(jù)源的所有配置都需要單獨(dú)配置,否則配置不會生效。
1)添加多數(shù)據(jù)配置:
## Spring DruidDataSource Configuration
# spring.datasource.druid.one.name=DataSource-1
# spring.datasource.druid.one.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.one.url=jdbc:mysql://localhost:3306/dbname1?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&autoReconnectForPools=true&noAccessToProcedureBodies=true&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull
spring.datasource.druid.one.username=root
spring.datasource.druid.one.password=123456
spring.datasource.druid.one.initial-size=10
spring.datasource.druid.one.min-idle=10
spring.datasource.druid.one.max-active=100
spring.datasource.druid.one.max-wait=6000
spring.datasource.druid.one.test-while-idle=true
spring.datasource.druid.one.test-on-borrow=false
spring.datasource.druid.one.test-on-return=false
spring.datasource.druid.one.validation-query=select 1
spring.datasource.druid.one.time-between-eviction-runs-millis=30000
spring.datasource.druid.one.min-evictable-idle-time-millis=600000
spring.datasource.druid.one.max-evictable-idle-time-millis=900000
spring.datasource.druid.one.keep-alive=true
## Spring DruidDataSource Configuration
# spring.datasource.druid.two.name=DataSource-1
# spring.datasource.druid.two.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.two.url=jdbc:mysql://localhost:3306/dbname2?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&autoReconnectForPools=true&noAccessToProcedureBodies=true&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull
spring.datasource.druid.two.username=root
spring.datasource.druid.two.password=123456
spring.datasource.druid.two.initial-size=10
spring.datasource.druid.two.min-idle=10
spring.datasource.druid.two.max-active=100
spring.datasource.druid.two.max-wait=6000
spring.datasource.druid.two.test-while-idle=true
spring.datasource.druid.two.test-on-borrow=false
spring.datasource.druid.two.test-on-return=false
spring.datasource.druid.two.validation-query=select 1
spring.datasource.druid.two.time-between-eviction-runs-millis=30000
spring.datasource.druid.two.min-evictable-idle-time-millis=600000
spring.datasource.druid.two.max-evictable-idle-time-millis=900000
spring.datasource.druid.two.keep-alive=true
2)創(chuàng)建多數(shù)據(jù)源:
@Primary
@Bean
@ConfigurationProperties("spring.datasource.druid.one")
public DruidDataSource dataSourceOne() {
return DruidDataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties("spring.datasource.druid.two")
public DruidDataSource dataSourceTwo() {
return DruidDataSourceBuilder.create().build();
}
3)使用多數(shù)據(jù)源:文章來源:http://www.zghlxwxcb.cn/news/detail-403990.html
@Autowired
private DruidDataSource dataSourceOne;
@Autowired
@Qualifier("dataSourceTwo")
private DruidDataSource dataSourceTwo;
配置多數(shù)據(jù)源的注意事項(xiàng):文章來源地址http://www.zghlxwxcb.cn/news/detail-403990.html
- 配置多數(shù)據(jù)源時(shí),最好通過 @Primary 指定默認(rèn)數(shù)據(jù)源。
- Druid 創(chuàng)建數(shù)據(jù)源對象時(shí),建議使用 DruidDataSource 代替 DataSource。
- Druid 創(chuàng)建數(shù)據(jù)源對象時(shí),注意創(chuàng)建 Bean 的方法名,最好通過 @Bean(“dataSourceOne”) 來指定數(shù)據(jù)源對象的名稱。
- 多數(shù)據(jù)源通常結(jié)合 ORM 框架一起使用。
到了這里,關(guān)于Spring Boot 使用 Druid 連接池詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!