SpringBoot 整合 Druid

SpringBoot 整合 Druid

1、Druid 简介
  • Druid 是阿里巴巴开源平台上一个数据库连接池实现,结合了 C3P0、DBCP 等 DB 池的优点,同时加入了日志监控。

  • Github地址:https://github.com/alibaba/druid/

2、配置数据源
  1. 添加 Druid 依赖

    <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.22</version>
    </dependency>
  2. 切换数据源:通过 spring.datasource.type 指定数据源

    spring:
      datasource:
        username: root
        password: 123456
        url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
        driver-class-name: com.mysql.cj.jdbc.Driver
        type: com.alibaba.druid.pool.DruidDataSource
    
  3. 在测试类中注入 DataSource,获取它看是否切换成功

    @Autowired
    DataSource dataSource;
    
    @Test
    void contextLoads() throws SQLException {
    
        // 查看一下默认的数据源:com.alibaba.druid.pool.DruidDataSource
        System.out.println(dataSource.getClass());
    
        // 获得数据库连接
        Connection connection = dataSource.getConnection();
        System.out.println(connection); // com.mysql.cj.jdbc.ConnectionImpl@65600fb3
    
        // 关闭
        connection.close();
    }

    切换成功!

  4. 切换成功后,便可设置数据源连接初始化大小等

    spring:
      datasource:
        username: root
        password: 123456
        url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
        driver-class-name: com.mysql.cj.jdbc.Driver
        type: com.alibaba.druid.pool.DruidDataSource
    
          #Spring Boot 默认是不注入这些属性值的,需要自己绑定
          #druid 数据源专有配置
          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,stat:监控统计、log4j:日志记录、wall:防御sql注入
          #如果允许时报错  java.lang.ClassNotFoundException: org.apache.log4j.Priority
          #则导入 log4j 依赖即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
          filters: stat,wall,log4j
          maxPoolPreparedStatementPerConnectionSize: 20
          useGlobalDataSourceStat: true
          connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
    
  5. 这里因为使用了 Log4j 日志,所以需要导入依赖

    <!-- https://mvnrepository.com/artifact/log4j/log4j -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
  6. 为 DuridDataSource 绑定全局配置文件中的参数,并添加到容器中,我们需要自己添加 DuridDataSource 组件到容器中,并绑定属性

    DruidConfig

    package com.cheng.config;
    
    import com.alibaba.druid.pool.DruidDataSource;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import javax.sql.DataSource;
    
    @Configuration
    public class DruidConfig {
    
        @ConfigurationProperties(prefix = "spring.datasource")
        @Bean
        public DataSource druidDataSource() {
            return new DruidDataSource();
        }
    
    }
  7. 测试是否成功

    @Autowired
    DataSource dataSource;
    
    @Test
    void contextLoads() throws SQLException {
    
        // 查看一下默认的数据源
        System.out.println(dataSource.getClass());
    
        // 获得数据库连接
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
    
        DruidDataSource druidDataSource = (DruidDataSource) this.dataSource;
        // druidDataSource 最大连接数 ==> 20
        System.out.println("druidDataSource 最大连接数 ==> " + druidDataSource.getMaxActive());
    
        // 关闭
        connection.close();
    }

    测试成功!

3、配置 Druid 数据源监控

Druid 数据源具有监控的功能,并提供了一个 web 界面方便用户查看。

  1. 设置 Druid 后台管理页

    DruidConfig

    // 后台监控
    @Bean
    public ServletRegistrationBean startViewServlet() {
        ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(),"/druid/*");
    
        // 后台需要有人登录,账号密码配置
        HashMap<String, String> initParameters = new HashMap<>();
    
        // 增加配置
        initParameters.put("loginUsername", "admin");// 登录账号
        initParameters.put("loginPassword", "123456");// 登录密码
    
        // 允许谁可以访问
        initParameters.put("allow", "");
    
        bean.setInitParameters(initParameters);// 设置初始化参数
        return bean;
    }
  2. 访问后台管理页面

    地址:http://localhost:8080/druid/index.html

    登录即可!

4、配置 Druid web 监控 filter 过滤器

在 DruidConfig 配置 filter

// Filter
@Bean
public FilterRegistrationBean wenStartFilter() {
    FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>();
    bean.setFilter(new WebStatFilter());

    // 可以过滤哪些请求
    HashMap<String, String> initParameters = new HashMap<>();
    // 这些东西不进行统计
    initParameters.put("exclusions", "*.js,*.css,/druid/*,/jdbc/*");
    bean.setInitParameters(initParameters);

    // /* 过滤所有请求
    bean.setUrlPatterns(Arrays.asList("/*"));
    return bean;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值