SpringBoot系列之集成Druid配置數據源監控


SpringBoot系列之集成Druid配置數據源監控

繼上一篇博客SpringBoot系列之JDBC數據訪問之后,本博客再介紹數據庫連接池框架Druid的使用

實驗環境准備:

  • Maven
  • IntelliJ IDEA

先新建一個Springboot Initializer項目,詳情參考SpringBoot系列之快速創建Initializer項目,注意引入必須的JDBC,web依賴等等,因為Druid默認沒提供,所以去https://mvnrepository.com/artifact/com.alibaba/druid獲取配置信息,項目創建之后,pom配置應該有如下:

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.27</version>
			<scope>runtime</scope>
		</dependency>

		<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.1.2</version>
		</dependency>

新增一個application.yml配置文件,加上如下配置:type: com.alibaba.druid.pool.DruidDataSource必須指定

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/springboot?characterEncoding=utf8&useSSL=true
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
    initialization-mode: always
    type: com.alibaba.druid.pool.DruidDataSource

    # 連接池設置
    initial-size: 5
    min-idle: 5
    max-active: 20
    # 配置獲取連接等待超時的時間
    max-wait: 60000
    # 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒
    time-between-eviction-runs-millis: 90000
    # 配置一個連接在池中最小生存的時間,單位是毫秒
    min-evictable-idle-time-millis: 300000
    # Oracle請使用select 1 from dual
    validation-query: SELECT 1
    test-while-idle: true
    test-on-borrow: false
    test-on-return: false
    # 打開PSCache,並且指定每個連接上PSCache的大小
    pool-prepared-statements: true
    max-pool-prepared-statement-per-connection-size: 20
    # 配置監控統計攔截的filters,去掉后監控界面sql無法統計,'wall'用於防火牆
    filters: stat,wall,slf4j
    # 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄
    connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
    # 合並多個DruidDataSource的監控數據
    use-global-data-source-stat: true

寫一個junit測試類進行測試:

package com.example.springboot.jdbc;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

@SpringBootTest
class SppringbootJdbcApplicationTests {

	@Autowired
	DataSource dataSource;

	@Test
	public void contextLoads() throws SQLException {
		System.out.println(dataSource.getClass());
		Connection connection = dataSource.getConnection();
		System.out.println(connection);
		connection.close();
	}

}

經過調試,屬性都沒起效,原因是Springboot的自動配置類並沒有如下屬性的,所以在idea里都標識顯示如下顏色:
在這里插入圖片描述
所以要讓這些配置起效,需要寫個配置類,通過ConfigurationProperties進行屬性映射

@Configuration
public class DriudConfig {

    @Primary
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource(){
        return new DruidDataSource();
    }
}

再次啟動junit調試,發現屬性都起效了,ok,測試通過
在這里插入圖片描述
Druid提供了一個針對數據源等等進行監控的平台,所以需要配置才能正常使用

package com.example.springboot.jdbc.config;

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 org.springframework.context.annotation.Primary;

import javax.sql.DataSource;

/**
 * <pre>
 *  Druid配置類
 * </pre>
 *
 * @author nicky
 * <pre>
 * 修改記錄
 *    修改后版本:     修改人:  修改日期: 2019年12月15日  修改內容:
 * </pre>
 */
@Configuration
public class DriudConfig {

    @Primary
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource(){
        return new DruidDataSource();
    }

    /**
     * 注冊ServletRegistrationBean
     * @return
     */
    @Bean
    public ServletRegistrationBean registrationBean() {
        ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        /** 初始化參數配置,initParams**/
        //白名單
        bean.addInitParameter("allow", "127.0.0.1");
        //IP黑名單 (存在共同時,deny優先於allow) : 如果滿足deny的話提示:Sorry, you are not permitted to view this page.
        bean.addInitParameter("deny", "192.168.1.73");
        //登錄查看信息的賬號密碼.
        bean.addInitParameter("loginUsername", "admin");
        bean.addInitParameter("loginPassword", "admin");
        //是否能夠重置數據.
        bean.addInitParameter("resetEnable", "false");
        return bean;
    }

    /**
     * 注冊FilterRegistrationBean
     * @return
     */
    @Bean
    public FilterRegistrationBean druidStatFilter() {
        FilterRegistrationBean bean = new FilterRegistrationBean(new WebStatFilter());
        //添加過濾規則.
        bean.addUrlPatterns("/*");
        //添加不需要忽略的格式信息.
        bean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return bean;
    }
}

ok,訪問http://127.0.0.1:8080/ ,輸入代碼里配置的賬號密碼就可以登錄進行訪問,我設置的賬號密碼都是admin,輸入賬號密碼登錄平台,查詢數據源,sql監控等等功能
在這里插入圖片描述

代碼例子下載:github下載鏈接


免責聲明!

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



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