首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Spring Boot 整合 Druid 實現多維度 SQL 監控與統計分析

     編輯:Java 相關知識

Druid 作為阿里巴巴開源的高性能資料庫連線池,內建強大的 SQL 監控、統計分析與防火牆功能。本文詳細示範如何在 Spring Boot 專案中整合 Druid,並啟用多維度監控儀表板。

核心依賴配置

<dependencies>
    <!-- Spring Boot 基礎 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    
    <!-- Druid 連線池 -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.2.18</version>
    </dependency>
    
    <!-- MySQL 驅動 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
</dependencies>

application.yml 完整配置

server:
  port: 8080
  servlet:
    context-path: /druid-demo

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/myblog?useSSL=false&serverTimezone=UTC
    username: root
    password: root
    
    # 連線池核心參數
    initialSize: 5
    minIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    
    # PSCache 優化
    poolPreparedStatements: true
    maxPoolPreparedStatementPerConnectionSize: 20
    
    # 監控攔截器:stat-統計、wall-防火牆、log4j-日誌
    filters: stat,wall,slf4j
    
    # 連線屬性:合併 SQL、慢查詢閾值 5 秒
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

監控端點配置兩種方式

方式一:原生 Servlet / Filter 註冊 (推薦 Spring Boot 2.x+)

@Configuration
public class DruidMonitorConfig {

    @Bean
    public ServletRegistrationBean<StatViewServlet> statViewServlet() {
        ServletRegistrationBean<StatViewServlet> bean = 
            new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
        bean.addInitParameter("allow", "127.0.0.1,192.168.10.25");  // 白名單
        bean.addInitParameter("deny", "192.168.1.73");              // 黑名單
        bean.addInitParameter("loginUsername", "admin");
        bean.addInitParameter("loginPassword", "securePassword123");
        bean.addInitParameter("resetEnable", "false");              // 禁用重置功能
        return bean;
    }

    @Bean
    public FilterRegistrationBean<WebStatFilter> webStatFilter() {
        FilterRegistrationBean<WebStatFilter> bean = 
            new FilterRegistrationBean<>(new WebStatFilter());
        bean.addUrlPatterns("/*");
        bean.addInitParameter("exclusions", "*.js,*.css,*.png,*.jpg,*.gif,*.ico,/druid/*");
        bean.addInitParameter("profileEnable", "true");             // 開啟 URL 調用統計
        return bean;
    }
}

方式二:Spring Boot 3.x 原生配置屬性 (簡化版)

spring:
  datasource:
    druid:
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*
        allow: 127.0.0.1
        login-username: admin
        login-password: securePassword123
      web-stat-filter:
        enabled: true
        url-pattern: /*
        exclusions: "*.js,*.css,*.png,*.jpg,*.gif,*.ico,/druid/*"
        profile-enable: true

監控儀表板核心功能

啟動專案後訪問 https://localhost:8080/druid-demo/druid/index.html,主要監控維度:

  • SQL 監控:執行次數、耗時統計、慢 SQL 記錄、SQL 防火牆攔截記錄
  • URI 監控:每個 URL 的調用次數、平均耗時、參數分析
  • 連線池監控:活躍連線數、等待線程數、連線建立/關閉統計
  • Spring Bean 監控:DataSource、SqlSessionFactory 等 Bean 方法調用統計

生產環境優化建議

  1. 安全加固:務必修改預設帳密、配置 IP 白名單、啟用 HTTPS
  2. 日誌整合:使用 slf4j 替代 log4j,統一日誌框架
  3. 慢 SQL 告警:結合 druid.stat.slowSqlMillis 與日誌告警系統
  4. 分庫分表監控:配置 druid.stat.mergeSql=true 合併參數化 SQL 統計

總結

Druid 不僅是高性能連線池,更是生產環境 SQL 可觀測性的利器。透過 Spring Boot 自動配置與少量客製化,即可獲得企業級的資料庫監控能力,助力效能調優與故障快速定位。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved