springboot集成druid實現數據源監控


 

1、導入依賴

<dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.8</version>
            <optional>true</optional>
        </dependency>

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

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.1.5.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
            <optional>true</optional>
            <version>2.1.5.RELEASE</version>
        </dependency>
    </dependencies>

 

2、配置文件

spring.datasource.druid.username=root
spring.datasource.druid.password=123456
#連接的URL
spring.datasource.druid.url=jdbc:mysql://192.169.1.38:3306/emp_test?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=Asia/Shanghai
#檢測連接是否有效的sql
spring.datasource.druid.validation-query=SELECT 1 FROM DUAL
###監控配置
# 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配置
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=admin
#允許登錄監控頁面ip白名單,不配置即所有ip均是白名單
spring.datasource.druid.stat-view-servlet.allow=
# 配置StatFilter
spring.datasource.druid.filter.stat.enable=true
spring.datasource.druid.filter.stat.db-type=mysql
spring.datasource.druid.filter.stat.log-slow-sql=true
spring.datasource.druid.filter.stat.slow-sql-millis=5
# 配置WallFilter
spring.datasource.druid.filter.wall.enabled=true
spring.datasource.druid.filter.wall.db-type=mysql
spring.datasource.druid.filter.wall.config.delete-allow=true
spring.datasource.druid.filter.wall.config.drop-table-allow=false
spring.datasource.druid.filter.wall.config.multi-statement-allow=true

 

3、發送http請求執行sql

package com.harara.druid.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Map;

/**
 * @author : harara
 * @version : 2.0
 * @date : 2020/6/17 9:32
 */
@RestController
public class UserController {

    private static final Logger logger = LoggerFactory.getLogger(UserController.class);

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @GetMapping("/user")
    public List<Map<String, Object>> hello() {
        List<Map<String, Object>> lists = jdbcTemplate.queryForList("select host,user from mysql.user ", new Object[]{});
        return lists;
    }
}

 請求 http://localhost:8080/user

 

 

4、監控管理后台

 輸入http://localhost:8080/druid訪問監控管理后台頁面

使用上面配置文件中設置的賬號密碼進行登錄

 

 SQL監控頁面

 

5、各配置項說明

 

配置項 說明        
spring.datasource.druid.web-stat-filter.enabled=true
開啟WebStatFilter攔截
spring.datasource.druid.web-stat-filter.url-pattern=/*
攔截哪些請求
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
排查攔截哪些請求
spring.datasource.druid.stat-view-servlet.enabled=true
開啟StatViewFilter監控管理后台

spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
監控管理后台訪問地址
spring.datasource.druid.stat-view-servlet.reset-enable=false
是否關閉監控管理后台重置(Reset All)按鈕
spring.datasource.druid.stat-view-servlet.login-username=admin
監控管理后台登錄用戶名
spring.datasource.druid.stat-view-servlet.login-password=123456
監控管理后台登錄密碼
spring.datasource.druid.stat-view-servlet.allow=
允許登錄監控頁面ip白名單,不配置即所有ip均是白名單
spring.datasource.druid.filter.stat.enable=true
 
spring.datasource.druid.filter.stat.db-type=mysql
數據庫類型
spring.datasource.druid.filter.stat.log-slow-sql=true
顯示慢日志
spring.datasource.druid.filter.stat.slow-sql-millis=5000
sql查詢超過多少秒被判定是慢日志
 
spring.datasource.druid.filter.stat.merge-sql=true
 
 是否合並Sql
spring.datasource.druid.filter.wall.enabled=true
 
spring.datasource.druid.filter.wall.db-type=mysql
數據庫類型
spring.datasource.druid.filter.wall.config.delete-allow=true
是否允許執行DELETE語句
spring.datasource.druid.filter.wall.config.drop-table-allow=false
是否允許修改表
spring.datasource.druid.filter.wall.config.multi-statement-allow=true
是否允許一次執行多條語句,缺省關閉

 

關於是否合並sql的理解(spring.datasource.druid.filter.stat.merge-sql=true)

 

當你程序中存在沒有參數化的sql執行時,sql統計的效果會不好。比如:

select * from t where id = 1
select * from t where id = 2
select * from t where id = 3


在統計中,顯示為3條sql,這不是我們希望要的效果。StatFilter提供合並的功能,能夠將這3個SQL合並為如下的SQL

select * from t where id = ?

 

參考地址

Druid使用手冊: https://www.bookstack.cn/read/Druid/ffdd9118e6208531.md

Druid(二)監控統計功能之StatFilter:https://blog.csdn.net/HSH205572/article/details/86608705

druid github地址:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM