SpringBoot => Druid 使用

Posted 思想累积

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot => Druid 使用相关的知识,希望对你有一定的参考价值。

1、Druid 是什么

Druid 是一个 JDBC 组件,包括三部分:

  • DruidDriver 代理 Driver,能够提供基于 Filter - Chain 模式的插件体系
  • DruidDataSource 高效可管理的数据库连接池
  • SQLParser

Druid 官网:https://druid.apache.org/

官方下载:https://github.com/alibaba/druid

官方文档:https://druid.apache.org/docs/latest/design/index.html

2、Druid 的作用

  • 可以监控数据库访问性能,内置提供了一个 StatFilter 插件,能够详细统计 SQL 的执行性能,对线上分析数据库访问性能有帮助。
  • 替换 DBCP 和 C3P0,Druid 提供了一个高效,功能强大,可扩展性好的数据库连接池
  • SQL 执行日志,提供了不同的 LogFilter,支持 Common-Logging、Log4j 和 JdkLog

2、导入 maven 依赖

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

3、DruidDataSource 配置

Druid 配置:https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE

spring:
  datasource:
    # 基本属性
    username: username
    password: password
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver
	type: com.alibaba.druid.pool.DruidDataSource
    # 连接池属性
    druid:
      # 配置初始化大小,最大,最小
      initial-size: 1
      max-active: 20
      min-idle: 1
      # 连接等待超时时间
      max-wait: 6000
      # 多久进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      time-between-eviction-runs-millis: 60000
      # 在连接池中最小的生存的时间,单位是毫秒
      min-evictable-idle-time-millis: 300000
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      pool-prepared-statements: true
      max-open-prepared-statements: 20
      keep-alive: true
      async-init: true
      phy-max-use-count: 500
      # 监控器拦截的 filters
      filters: stat

4、Druid Servlet 配置

web.xml 配置

<servlet>
    <servlet-name>DruidStatView</servlet-name>
    <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
    <!-- 配置 Druid 监控信息显示页面 -->  
    <init-param>  
        <!-- 允许清空统计数据 -->  
        <param-name>resetEnable</param-name>  
        <param-value>true</param-value>  
    </init-param>  
    <init-param>  
        <!-- 用户名 -->  
        <param-name>loginUsername</param-name>  
        <param-value>username</param-value>  
    </init-param>  
    <init-param>  
        <!-- 密码 -->  
        <param-name>loginPassword</param-name>  
        <param-value>password</param-value>  
    </init-param>
    <!-- 访问控制
		deny 优先于allow
		allow 没有配置或者为空,允许所有访问,不支持 IPV6
	-->
    <init-param>
        <param-name>allow</param-name>
        <param-value>128.242.127.1/24,128.242.128.1</param-value>
    </init-param>
    <init-param>
        <param-name>deny</param-name>
        <param-value>128.242.127.4</param-value>
    </init-param>
    <!-- 配置 resetEnable,允许清空统计数据 -->
    <init-param>
        <param-name>resetEnable</param-name>
        <param-value>true</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>DruidStatView</servlet-name>
    <url-pattern>/druid/*</url-pattern>
</servlet-mapping>

SpringBoot 配置

@Configuration
public class DruidConfig {

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

    // Druid 后台监控
    // SpringBoot 内置 Servlet 容器,没有 web.xml,替代方式:ServletRegistrationBean
    @Bean
    public ServletRegistrationBean servletRegistrationBean(){
        ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");

        // 后台登录,账号密码设置
        HashMap<String, String> map = new HashMap<>();

        // 增加配置,key 为固定值
        map.put("loginUsername", "username");
        map.put("loginPassword", "password");

        // 允许谁访问,为空代表所有人可以访问
        map.put("allow", "");

        // 禁止访问地址
        map.put("name", "IP");
        
        bean.setInitParameters(map);
        
        return bean;
    }

    // 过滤器
    @Bean
    public FilterRegistrationBean filterRegistrationBean(){
        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setFilter(new WebStatFilter());

        HashMap<String, String> map = new HashMap<>();

        // 过滤路径
        bean.addUrlPatterns("/*");
        
        // 忽略过滤的形式
        map.put("exclusions", "*.js,*.css,*.png,*.gif,*.ico,/druid/*");
        
        // 过滤的请求
        bean.setInitParameters(map);

        return bean;
    }

}

5、访问 Druid 后台

http://localhost:8080/druid/login.html

在这里插入图片描述

以上是关于SpringBoot => Druid 使用的主要内容,如果未能解决你的问题,请参考以下文章

优雅写代码系统springboot+mybatis+pagehelper+mybatisplus+druid教你如何优雅写代码

springboot2.x配置druid sql监控

SpringBoot整合Druid数据连接池

2510-Druid监控功能的深入使用与配置-基于SpringBoot-完全使用java config的形式

springboot整合Druid数据源

springboot中使用druid和监控配置