SpringBoot 中使用 阿里巴巴 Druid 数据源,监控 sql 等

继续总结 Java 后台的工作2

前言

之前写过一个 SSM 中使用 Druid 替换 c3p0 数据源:https://blog.csdn.net/larger5/article/details/79509895

近来项目基本都是基于 SpringBoot 的,同理,使用 Druid 作为数据源,也是很简单的操作、原理

代码

这里写图片描述

做了一个简单 CRUD 来测试 sql,但是都不是重点,这里重点在于数据源的配置

1.DruidConfig.java

package com.cun.config;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

import javax.sql.DataSource;

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 com.alibaba.druid.pool.DruidDataSource; //这个包容易导入错误
import com.alibaba.druid.support.http.StatViewServlet; //这个包容易导入错误
import com.alibaba.druid.support.http.WebStatFilter; //这个包容易导入错误

@Configuration
public class DruidConfig {

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

    // 配置Druid的监控
    // 1、配置一个管理后台的Servlet
    @Bean
    public ServletRegistrationBean statViewServlet() {
        ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");

        Map<String, String> initParams = new HashMap<>();
        // 监控页面登录用户名  

        initParams.put("loginUsername", "admin");

        // 监控页面登录用户密码
        initParams.put("loginPassword", "123456");

        // ip白名单(没有配置或者为空,则允许所有访问)
        initParams.put("allow", "");

        // ip黑名单(如果某个ip同时存在,deny优先于allow)
        initParams.put("deny", "");
        bean.setInitParameters(initParams);
        return bean;
    }

    // 2、配置一个web监控的filter
    @Bean
    public FilterRegistrationBean webStatFilter() {
        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setFilter(new WebStatFilter());

        Map<String, String> initParams = new HashMap<>();

        // 不拦截的静态资源
        initParams.put("exclusions", "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*");
        bean.setInitParameters(initParams);

        // 拦截所有的请求
        bean.setUrlPatterns(Arrays.asList("/*"));
        return bean;
    }
}

2.SpringBoot 项目基本配置 application.yml

server:
  port: 80 #为了以后访问项目不用写端口号
  context-path: / #为了以后访问项目不用写项目名
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: 123
    type: com.alibaba.druid.pool.DruidDataSource  #改变默认数据源 c3p0 为 Druid
  jpa: 
    hibernate:
      ddl-auto: update  #数据库同步代码
    show-sql: true      #dao操作时,显示sql语句

4.Druid 基本配置 application.properties

# 初始化大小,最小,最大  
spring.datasource.initialSize=5  
spring.datasource.minIdle=5  
spring.datasource.maxActive=20  
# 配置获取连接等待超时的时间  
spring.datasource.maxWait=60000  
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒  
spring.datasource.timeBetweenEvictionRunsMillis=60000  
# 配置一个连接在池中最小生存的时间,单位是毫秒  
spring.datasource.minEvictableIdleTimeMillis=300000  
# 校验SQL,Oracle配置 spring.datasource.validationQuery=SELECT 1 FROM DUAL,如果不配validationQuery项,则下面三项配置无用  
spring.datasource.validationQuery=SELECT 'x'  
spring.datasource.testWhileIdle=true  
spring.datasource.testOnBorrow=false  
spring.datasource.testOnReturn=false  
# 打开PSCache,并且指定每个连接上PSCache的大小  
spring.datasource.poolPreparedStatements=true  
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20  
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙  
spring.datasource.filters=stat,wall,log4j  
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录  
spring.datasource.connectionProperties=druid.stat.mergeSql=true;
druid.stat.slowSqlMillis=5000  
# 合并多个DruidDataSource的监控数据  
spring.datasource.useGlobalDataSourceStat=true  

4. Druid 的 pom

        <!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.9</version>
        </dependency>

效果

在浏览器上,输入类似如下的链接(注意 server 中 port、context-path 配置)

http://localhost/druid/sql.html

这里写图片描述

界面很明显,应该是使用 BootStrap 做的~

其他

参考文章:

Druid的SQL监控没有数据

SpringBoot整合druid

猜你喜欢

转载自blog.csdn.net/larger5/article/details/79903387