SpringBoot => Druid 使用

8 篇文章 0 订阅

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

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一起来搬砖呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值