Spring Boot 數據庫鏈接池 Druid

簡介

數據庫鏈接是一種關鍵的有限的昂貴的資源,這一點在多用戶的網頁應用程序中體現得尤其突出。對數據庫鏈接的管理能顯著影響到整個應用程序的伸縮性和健壯性,影響到程序的性能指標。數據庫鏈接池正是針對這個問題提出來的。數據庫鏈接池負責分配、管理和釋放數據庫鏈接,它容許應用程序重複使用一個現有的數據庫鏈接,而不是再從新創建一個;釋放空閒時間超過最大空閒時間的數據庫鏈接來避免由於沒有釋放數據庫鏈接而引發的數據庫鏈接遺漏。這項技術能明顯提升對數據庫操做的性能。css

Druid:/ˈdruːɪd a priest of an ancient Celtic religion 德魯伊特(古代凱爾特人的祭司)html

Druid wiki 介紹挺全面的,有中文教程,常見問題的Wiki總結也挺全。mysql

Druid鏈接池是阿里巴巴開源的數據庫鏈接池項目。Druid鏈接池爲監控而生,內置強大的監控功能,監控特性不影響性能。功能強大,能防SQL注入,內置Loging能診斷Hack應用行爲git

Druid 實用的功能:github

  • 詳細的監控
  • ExceptionSorter,針對主流數據庫的返回碼都有支持
  • SQL 防注入
  • 內置加密配置
  • 衆多擴展點,方便定製

配置

怎麼配置數據庫鏈接池?web

你能夠在程序中直接調用DruidDataSource,也能夠使用Spring配置,或者使用JNDI配置。spring

配置 Druid 鏈接池方式主要有兩種:sql

  • 引入第三方druid包,這種在配置時須要手動配置 DruidDataSource類 和監控
  • 引入 druid-spring-boot-starter 包, 修改對應環境配置文件便可,本文采用的這種方式,Github 上有次對應的指導:Druid Spring Boot Starter-中文

POM-添加 Druid 依賴

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.13</version>
</dependency>

添加 Druid 配置

filters: stat,wall,log4j數據庫

  • stat:Druid 內置提供一個 StatFilter ,用於統計監控信息。若是須要配置訪問頁面能夠參考:配置_StatViewServlet配置
  • wall:Druid 防護 SQL 注入攻擊的 WallFilter 就是經過 Druid 的 SQL Parser 分析。Druid 提供的 SQL Parser 能夠在 JDBC 層攔截 SQL 作相應處理,好比說分庫分表、審計等。對應了監控頁面的 「防火牆」頁面;
  • log4j:這個就是日誌記錄的功能,能夠把 sql 語句打印到 log4j 供排查問題。
  • config: 提供了密碼加解密的功能

修改對應環境的配置文件,添加 druid 的支持json

mybatis.type-aliases-package==com.michael.mybatisdemo
spring.datasource.url=jdbc:mysql://192.168.3.43:3306/beta?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=cicd
spring.datasource.password=Home123*
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
server.port=8089
swagger.enable=true
# druid鏈接池配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
# 初始化大小,最小,最大
spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=100
spring.datasource.druid.min-idle=5
# 鏈接超時配置
spring.datasource.druid.max-wait=60000
spring.datasource.druid.pool-prepared-statements=true
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
spring.datasource.druid.validation-query=SELECT 1 FROM DUAL
spring.datasource.druid.validation-query-timeout=60000
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
spring.datasource.druid.test-while-idle=true
# 多久進行檢測一次空閒的鏈接,單位毫秒
spring.datasource.druid.time-between-eviction-runs-millis=60000
# 鏈接最小生存時間
spring.datasource.druid.min-evictable-idle-time-millis=100000
# druid配置監控統計攔截的filters,去掉後監控界面sql沒法統計,'wall'用於防火牆
spring.datasource.druid.filters=config,wall,stat
# WebStatFilter配置,說明請參考Druid Wiki,配置_配置WebStatFilter
spring.datasource.druid.web-stat-filter.enabled=true
spring.datasource.druid.web-stat-filter.url-pattern=/*
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
# StatViewServlet配置,說明請參考Druid Wiki,配置_StatViewServlet配置
spring.datasource.druid.stat-view-servlet.enabled=true
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
spring.datasource.druid.stat-view-servlet.reset-enable=false
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=admin123
spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
spring.datasource.druid.stat-view-servlet.deny=192.168.32.139
# druid配置 Filter
# 配置StatFilter
spring.datasource.druid.filter.stat.db-type=mysql
spring.datasource.druid.filter.stat.log-slow-sql=true
# 配置監控攔截,慢sql,10秒,而且經過日誌輸出執行慢的SQL
spring.datasource.druid.filter.stat.slow-sql-millis=5000
# 配置WallFilter
spring.datasource.druid.filter.wall.enabled=true
spring.datasource.druid.filter.wall.db-type=mysql
spring.datasource.druid.filter.wall.config.delete-allow=false
spring.datasource.druid.filter.wall.config.drop-table-allow=false

查看

127.0.0.1:8080/druid/login.html, 進入 druid 登錄界面,以下圖,輸入在配置類 DruidConfiguration 中配置的用戶名和密碼,進入監控界面

咱們已經成功的訪問到了監控首頁,能夠看到大體包含了以下幾個模塊:數據源、SQL監控、SQL防火牆、Web應用、URI監控、Session監控、JSONAPI等。

數據源

能夠看到項目中管理的全部數據源配置的詳細狀況,除了密碼沒有顯示外其餘都在。

SQL監控

能夠查看全部的執行sql語句

SQL防火牆

druid提供了黑白名單的訪問,能夠清楚的看到sql防禦狀況。

Web應用

能夠看到目前運行的web程序的詳細信息。

URI監控

能夠監控到全部的請求路徑的請求次數、請求時間等其餘參數。

Session監控

能夠看到當前的session情況,建立時間、最後活躍時間、請求次數、請求時間等詳細參數。

JSONAPI

經過api的形式訪問Druid的監控接口,api接口返回Json形式數據。

其餘

本文參考示例

參考

相關文章
相關標籤/搜索