springboot集成Drui以及Drui监控台的配置

351 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情

一、整合Drui数据源

1-1、创建springboot项目

首先先创建springboot项目,使用idea创建比较方便,同时选择相关依赖

image.png

1-2、添加drui数据库连接池

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.21</version>
</dependency>

1-3、配置数据连接池相关信息

因为配置信息比较多,因此建议使用application.yml文件,这比较清晰,数据源的驱动可以参考如下方法:

image.png

最终关于数据库配置如下:

#数据源
spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/springboot_mybatis?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource

    #   数据源其他配置
    initialSize: 5
    minIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true

    #   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
    filters: stat,wall
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
    schema: classpath:sql/mybatis.sql
    initialization-mode: ALWAYS

1-4、数据源配置类

虽然配置了上面相关数据库的配置,但是因为没有场景启动器,是无法使用的,之前在springmvc的文章中也介绍关于数据源的配置。有兴趣同学可以翻一下之前的文章。

在springboot中设置数据源配置类有两种方式,一种是将配置加载到DataSource中,另外一种是根据配置动态构建一个DataSource,

image.png 以上两种方式都可以完成数据源的配置,但是相比较第一种比较灵活。易用。

1-5、Drui数据库监控控制台

首先在配置类中添加Drui监控台的Servlet以及过滤器,最终Drui的配置类信息如下:

package com.jony.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 javax.sql.DataSource;

@Configuration
public class DruidConfig {

    // 将所有前缀为spring.datasource下的配置项都加载到DataSource中
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druidDataSource() {
        return new DruidDataSource();
    }

    //根据配置动态构建一个DataSource
//    @Bean
//    public DataSource druidDataSource1(DataSourceProperties properties){
//        return properties.initializeDataSourceBuilder().build();
//    }

    @Bean
    public ServletRegistrationBean statViewServlet() {
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        // 添加IP白名单
        servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
        // 添加IP黑名单,当白名单和黑名单重复时,黑名单优先级更高
        //servletRegistrationBean.addInitParameter("deny", "127.0.0.1");
        // 添加控制台管理用户
        servletRegistrationBean.addInitParameter("loginUsername", "admin");
        servletRegistrationBean.addInitParameter("loginPassword", "123456");
        // 是否能够重置数据
        servletRegistrationBean.addInitParameter("resetEnable", "false");
        return servletRegistrationBean;
    }

    /**
     * 配置服务过滤器
     *
     * @return 返回过滤器配置对象
     */
    @Bean
    public FilterRegistrationBean statFilter() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
        // 添加过滤规则
        filterRegistrationBean.addUrlPatterns("/*");
        // 忽略过滤格式
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*,");
        return filterRegistrationBean;
    }
}

1-5-1、访问drui控制台

image.png

image.png

二、使用Drui场景启动器

通过上面已经了解到如何使用drui实现数据库及连接池的配置,但是还是比较繁琐的,下面就看一下使用简单的方式:drui场景启动器来实现数据源的配置。

2-1、添加springboot场景启动器依赖

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

2-2、启动项目访问drui

将之前配置的duri配置类注释掉,然后再次访问控制台

2-2、探究drui场景启动器的自动配置类

首先通过包,进入自动配置类,如下 image.png

然后进入这个方法 image.png

因为DruidDataSourceWrapper类实现了InitializingBean,因此在spring启动的时候就会加载这个配置,这样数据源的信息就可以自动配置上了

image.png

2-4、使用场景启动器设置druid页面

2-4-1、查看servlet

继续看durid的自动配置类,可以看到标记的类 image.png

进入之后可以发现,和我们自己配置的启动类差不多,但是类上加了注解

@ConditionalOnProperty(
    name = {"spring.datasource.druid.stat-view-servlet.enabled"},
    havingValue = "true"
)

这样就是说必须在配置文件中添加spring.datasource.druid.stat-view-servlet.enabled=true才可以让当前类生效。

image.png

2-4-2、查看过滤器

同样进入这个过滤器类

image.png

可以看到和我自己配置的也基本一致

image.png

同样要使用过滤器也需要在配置文件中进行配置 image.png

这样通过springboot的场景启动器就可以实现通过简单的配置实现drui的相关功能了。