【SpringBoot | Druid】SpringBoot整合Druid

SpringBoot整合Druid

Druid是个十分强大的后端管理工具,具体的功能和用途请问阿里爸爸

1. 在pom.xml中导入包

<!-- alibaba 的druid数据库连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.18</version>
        </dependency>

2. 配置Druid

  • 首先在application.yml中配置druid
spring:
  datasource:
    password: xxx
    # 如果存在多个数据源,监控的时候可以通过名字来区分开来
    name: mysql
    # 使用druid数据源
    type: com.alibaba.druid.pool.DruidDataSource
    # 驱动名字
    driver-class-name: com.mysql.cj.jdbc.Driver
    # 连接数据库的url
    url: jdbc:mysql://localhost:3306/xxx?serverTimezone=Asia/Shanghai&allowMultiQueries=true
    # 连接数据库的账号
    username: xxx
    #  连接数据库的密码
    # 扩展插件
    # 监控统计用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall
    filters: stat, wall
    # 最大连接池数量
    maxActive: 20
    # 初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
    initialSize: 5
    # 获取连接时最大等待时间,单位毫秒
    maxWait: 60000
    # 最小连接池数量
    minIdle: 1
    timeBetweenEvictionRunsMillis: 60000
    # 连接保持空闲而不被驱逐的最长时间
    minEvictableIdleTimeMillis: 300000
    # 用来检测连接是否有效的sql,要求是一个查询语句
    # 如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会其作用
    validationQuery: select count(1) from 'table'
    # 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效
    testWhileIdle: true
    # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
    testOnBorrow: false
    # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
    testOnReturn: false
    # 是否缓存preparedStatement,即PSCache
    poolPreparedStatements: false
    # 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true
    maxOpenPreparedStatements: -1
  • 其次编写Druid配置类
package xxx.xxx.xxx.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.beans.factory.annotation.Value;
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;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

/**
 * 配置 Druid
 *
 * @author axiang 
 */
@Configuration
public class DruidConfig {

    /* 设置Druid配置的默认前缀为 spring.datasource */
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druid() {
        return new DruidDataSource();
    }

    /* 自定义配置Druid管理界面的访问账户名 */
    @Value("${xxx.config.druid.name}")
    private String name;

    /* 自定义配置Druid管理界面的访问密码 */
    @Value("${xxx.config.druid.pwd}")
    private String pwd;

    /**
     * 配置Druid的监控
     * 配置一个管理后台的servlet
     *
     * @return
     */
    @Bean
    public ServletRegistrationBean statViewServlet() {
        ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
        Map<String, String> initParams = new HashMap<>(10);
        //账号
        initParams.put("loginUsername", name);
        //密码
        initParams.put("loginPassword", pwd);
        //默认允许所有
        initParams.put("allow", "");
        //不允许的黑名单ip
        initParams.put("deny", "");
        bean.setInitParameters(initParams);
        return bean;
    }

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

        Map<String, String> initParams = new HashMap<>(10);
        initParams.put("exclusions", "*.js,*.css,/druid/*");

        bean.setInitParameters(initParams);
        bean.setUrlPatterns(Collections.singletonList("/*"));

        return bean;
    }
}

3. 访问和测试

输入下面的IP,进入页面访问Druid内容

http://[IP地址]:[端口号]/[项目部署名]/druid/index.html
posted @ 2019-11-22 18:46  AXiangCoding  阅读(392)  评论(0编辑  收藏  举报