Druid數據源配置和監控配置

版權聲明:本文爲博主原創文章,無需授權即可轉載,甚至無需保留以上版權聲明,轉載時請務必註明作者。
https://blog.csdn.net/weixin_43453386/article/details/83582399

一、Druid

1、Druid是什麼

Druid是一個JDBC組件庫,包括數據庫連接池、SQL Parser等組件。
DruidDataSource是最好的數據庫連接池。
Druid能夠提供強大的監控和擴展功能。

2、Druid的Maven

1)Maven

http://central.maven.org/maven2/com/alibaba/druid/

http://www.mvnrepository.com/artifact/com.alibaba/druid

2)pom

<dependency>
		<groupId>com.alibaba</groupId>
		<artifactId>druid</artifactId>
		<version>${druid-version}</version>
	</dependency>

3、Druid的github源碼地址

https://github.com/alibaba/druid

二、Druid配置及詳解

1、application.yml中的Druid配置

spring:
  datasource:
 	  # 基本屬性
      name: dev
      url: jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&useSSL=false
      username: root
      password: 123456
      # 可以不配置,根據url自動識別,建議配置
      driver-class-name: com.mysql.jdbc.Driver
      ###################以下爲druid增加的配置###########################
      type: com.alibaba.druid.pool.DruidDataSource
      # 初始化連接池個數
      initialSize: 5
      # 最小連接池個數——》已經不再使用,配置了也沒效果
      minIdle: 2
      # 最大連接池個數
      maxActive: 20
      # 配置獲取連接等待超時的時間,單位毫秒,缺省啓用公平鎖,併發效率會有所下降
      maxWait: 60000
      # 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連接,單位是毫秒
      timeBetweenEvictionRunsMillis: 60000
      # 配置一個連接在池中最小生存的時間,單位是毫秒
      minEvictableIdleTimeMillis: 300000
      # 用來檢測連接是否有效的sql,要求是一個查詢語句。
      # 如果validationQuery爲null,testOnBorrow、testOnReturn、testWhileIdle都不會起作用
      validationQuery: SELECT 1 FROM DUAL
      # 建議配置爲true,不影響性能,並且保證安全性。
      # 申請連接的時候檢測,如果空閒時間大於timeBetweenEvictionRunsMillis,執行validationQuery檢測連接是否有效。
      testWhileIdle: true
      # 申請連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能
      testOnBorrow: false
      # 歸還連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能
      testOnReturn: false
      # 打開PSCache,並且指定每個連接上PSCache的大小
      poolPreparedStatements: true
      maxPoolPreparedStatementPerConnectionSize: 20
      # 通過別名的方式配置擴展插件,多個英文逗號分隔,常用的插件有: 
      # 監控統計用的filter:stat
      # 日誌用的filter:log4j
      # 防禦sql注入的filter:wall
      filters: stat,wall,log4j
      # 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄
      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
      # 合併多個DruidDataSource的監控數據
      useGlobalDataSourceStat: true

2、DruidConfig配置類

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration
public class DruidConfig {
    /** * 主要實現WEB監控的配置處理 */
    @Bean
    public ServletRegistrationBean druidServlet() {
        // 現在要進行druid監控的配置處理操作
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(
                new StatViewServlet(), "/druid/*");
        // 白名單,多個用逗號分割, 如果allow沒有配置或者爲空,則允許所有訪問
        servletRegistrationBean.addInitParameter("allow", "127.0.0.1,172.29.32.54");
        // 黑名單,多個用逗號分割 (共同存在時,deny優先於allow)
        servletRegistrationBean.addInitParameter("deny", "192.168.1.110");
        // 控制檯管理用戶名
        servletRegistrationBean.addInitParameter("loginUsername", "admin");
        // 控制檯管理密碼
        servletRegistrationBean.addInitParameter("loginPassword", "eju1314");
        // 是否可以重置數據源,禁用HTML頁面上的「Reset All」功能
        servletRegistrationBean.addInitParameter("resetEnable", "false");
        return servletRegistrationBean ;
    }
    
    @Bean
    public FilterRegistrationBean filterRegistrationBean() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean() ;
        filterRegistrationBean.setFilter(new WebStatFilter());
        //所有請求進行監控處理
        filterRegistrationBean.addUrlPatterns("/*"); 
        //添加不需要忽略的格式信息
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.css,/druid/*");
        return filterRegistrationBean ;
    }
    
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource druidDataSource() {
        return new DruidDataSource();
    }
}

3、打開Druid頁面

訪問:http://127.0.0.1:8084/druid/login.html
輸入:用戶名&&密碼
點擊:Sign in
在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述