在現代的Java應用中,使用一個高效可靠的數據源是至關重要的。Druid連接池作為一款強大的數據庫連接池,提供了豐富的監控和管理功能,成為很多Java項目的首選。本文將詳細介紹如何在Spring Boot 3項目中配置數據源,集成Druid連接池,以實現更高效的數據庫連接管理。
Spring Boot 3 配置數據源
Spring Boot 提供了自動配置(auto-configuration)功能,其中包括了對數據源的自動配置,我們只需要在項目中導入spring-boot-starter-jdbc
依賴及對應數據源的驅動依賴即可,我們使用的mysql數據庫,pom依賴如下:
<!-- SPRINGBOOT JDBC -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- Mysql驅動包 -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version>
</dependency>
配置文件如下:
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.10.106:3306/xj_doc?characterEncoding=utf8&serverTimezone=Asia/Shanghaiusername: rootpassword: 123456
Spring Boot默認使用 HikariCP 作為連接池,這是因為 HikariCP 提供了卓越的性能、低延遲和高效的資源利用。Spring Boot默認情況下會自動檢測 classpath 下是否存在 HikariCP。如果存在,Spring Boot 會將 HikariCP 作為默認的數據庫連接池。如果 classpath 下沒有 HikariCP,Spring Boot 會嘗試檢測其他連接池的存在,選擇順序如下:
如果不想通過自動檢測的方式,我們可以在配置文件application.yml
中設置 spring.datasource.type
屬性,指定要使用的連接池類型的完整類名,示例如下:
spring:datasource:type: com.alibaba.druid.pool.DruidDataSource
Spring Boot 3 集成 Druid
Druid網址
Druid是Java語言中最好的數據庫連接池。Druid能夠提供強大的監控和擴展功能。在國內是是數據庫連接池的首選。
Druid的github網址:https://github.com/alibaba/druid
引入依賴
在Spring Boot 3.x版本中引入依賴如下:
<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-3-starter</artifactId><version>1.2.20</version>
</dependency>
添加配置### 添加配置
配置文件如下:
spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.10.106:3306/xj_doc?characterEncoding=utf8&serverTimezone=Asia/Shanghaiusername: rootpassword: 123456# druid 連接池管理druid:# 初始化時建立物理連接的個數initial-size: 5# 連接池的最小空閑數量min-idle: 5# 連接池最大連接數量max-active: 20# 獲取連接時最大等待時間,單位毫秒max-wait: 60000# 申請連接的時候檢測,如果空閑時間大于timeBetweenEvictionRunsMillis,執行validationQuery檢測連接是否有效。test-while-idle: true# 既作為檢測的間隔時間又作為testWhileIdel執行的依據time-between-eviction-runs-millis: 60000# 銷毀線程時檢測當前連接的最后活動時間和當前時間差大于該值時,關閉當前連接(配置連接在池中的最小生存時間)min-evictable-idle-time-millis: 30000# 用來檢測數據庫連接是否有效的sql 必須是一個查詢語句(oracle中為 select 1 from dual)validation-query: select 'x'# 申請連接時會執行validationQuery檢測連接是否有效,開啟會降低性能,默認為truetest-on-borrow: false# 歸還連接時會執行validationQuery檢測連接是否有效,開啟會降低性能,默認為truetest-on-return: false# 是否緩存preparedStatement, 也就是PSCache,PSCache對支持游標的數據庫性能提升巨大,比如說oracle,在mysql下建議關閉。pool-prepared-statements: false# 置監控統計攔截的filters,去掉后監控界面sql無法統計,stat: 監控統計、Slf4j:日志記錄、waLL: 防御sqL注入filters: stat,wall,slf4j# 要啟用PSCache,必須配置大于0,當大于0時,poolPreparedStatements自動觸發修改為true。在Druid中,不會存在Oracle下PSCache占用內存過多的問題,可以把這個數值配置大一些,比如說100max-pool-prepared-statement-per-connection-size: -1# 合并多個DruidDataSource的監控數據use-global-data-source-stat: true# 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000web-stat-filter:# 是否啟用StatFilter默認值trueenabled: true# 添加過濾規則url-pattern: /*# 忽略過濾的格式exclusions: /druid/*,*.js,*.gif,*.jpg,*.png,*.css,*.icostat-view-servlet:# 是否啟用StatViewServlet默認值trueenabled: true# 訪問路徑為/druid時,跳轉到StatViewServleturl-pattern: /druid/*# 是否能夠重置數據reset-enable: false# 需要賬號密碼才能訪問控制臺,默認為rootlogin-username: druidlogin-password: druid# IP白名單allow: 127.0.0.1# IP黑名單(共同存在時,deny優先于allow)deny:
啟動項目
啟動項目,出現如下日志,則標識數據庫連接池已經使用了Druid。
2023-12-09T21:20:31.561+08:00 INFO 26176 --- [ main] c.a.d.s.b.a.DruidDataSourceAutoConfigure : Init DruidDataSource
2023-12-09T21:20:32.328+08:00 INFO 26176 --- [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited
訪問頁面
項目啟動后,我們可以通過訪問 Druid 控制臺來監控和管理數據庫連接池的狀態。控制臺的訪問地址通常是:http://localhost:8080/druid/login.html。
在訪問控制臺時,系統將要求輸入用戶名和密碼進行身份驗證。這些用戶名和密碼是在項目的配置文件中進行了配置的,
# 需要賬號密碼才能訪問控制臺,默認為root
login-username: druid
login-password: druid
至此,你已成功配置了數據源并集成了 Druid 連接池。通過合理配置 Druid 連接池的參數,你可以優化數據庫連接的性能和資源利用。同時,通過監控功能,你可以實時了解連接池的使用情況,及時發現潛在的問題。
總結
通過本文的介紹,你學會了如何在Spring Boot 3項目中配置數據源,集成Druid連接池,從而提高數據庫連接管理的效率。Druid連接池的監控和管理功能可以為你的應用提供更好的性能和可維護性。