欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Springboot整合druid

程序员文章站 2022-05-15 22:29:57
前面的Springboot整合jdbcTemplate、mybatis、jpa三篇文章中使用的数据库连接池都是Spingboot默认配置的tomcat.jdbc.pool。配置原理进入org.springframework.boot.autoconfigure.jdbc.DataSourceConf... ......

概述

前面的springboot整合jdbctemplate、mybatis、jpa三篇文章中使用的数据库连接池都是spingboot默认配置的tomcat.jdbc.pool。配置原理进入org.springframework.boot.autoconfigure.jdbc.datasourceconfiguration类查看,根据通过spring.datasource.type配置其他连接池,当然我们也可以配置指定的数据库连接池比如druid。配置druid有两种方式

第一种

配置传统的druid(不推荐,了解)

导入依赖

<dependency>
   <groupid>com.alibaba</groupid>
   <artifactid>druid</artifactid>
   <version>1.1.9</version>
</dependency>

配置文件中配置

#不指定spring.datasource.type 默认的连接池是tomcat.jdbc.pool
spring.datasource.type=com.alibaba.druid.pool.druiddatasource
#   数据源其他配置
spring.datasource.initialsize:5
spring.datasource.minidle:5
spring.datasource.maxactive:20
spring.datasource.maxwait:60000
spring.datasource.timebetweenevictionrunsmillis:60000
spring.datasource.minevictableidletimemillis:300000
spring.datasource.validationquery:select 1 from dual
spring.datasource.testwhileidle:true
spring.datasource.testonborrow:false
spring.datasource.testonreturn:false
spring.datasource.poolpreparedstatements:true
#   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.filters: stat,wall,log4j
spring.datasource.maxpoolpreparedstatementperconnectionsize: 20
spring.datasource.useglobaldatasourcestat: true  
spring.datasource.connectionproperties: druid.stat.mergesql=true;druid.stat.slowsqlmillis=500

查看关于数据源配置类如下,我们知道boot并没有配置以上我们制定的属性。

Springboot整合druid

所以我们需要自己配置

import com.alibaba.druid.pool.druiddatasource;
import com.alibaba.druid.support.http.statviewservlet;
import com.alibaba.druid.support.http.webstatfilter;
import com.sun.org.apache.xml.internal.resolver.helpers.publicid;
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.arrays;
import java.util.hashmap;
import java.util.map;

/**
 * @author lupenghu
 * @des
 * @date create in 14:232019/6/6
 * @
 */
//数据源配置
@configuration
public class druidconfig {
    //以spring.datasource为前缀的都配置进来
    @configurationproperties(prefix = "spring.datasource")
    //自定一个数据源  并注入容器中
    @bean
    public datasource druid() {
        return new druiddatasource();
    }
    //这里也可以配置druid監控
    //1、配置一个管理后台的servlet
    @bean
    public servletregistrationbean statviewservlet(){
        servletregistrationbean bean = new servletregistrationbean(new statviewservlet(), "/druid/*");
        map<string,string> initparams = new hashmap<>();

        //里面配置哪些可以进入statviewservlet查看
        initparams.put("loginusername","lphluck");
        initparams.put("loginpassword","123123");
        initparams.put("allow","");//默认就是允许所有访问
        initparams.put("deny","192.168.15.21");//拒绝访问

        bean.setinitparameters(initparams);
        return bean;
    }


    //2、配置一个web监控的filter
    @bean
    public filterregistrationbean webstatfilter(){
        filterregistrationbean bean = new filterregistrationbean();
        bean.setfilter(new webstatfilter());
        map<string,string> initparams = new hashmap<>();
        //不拦截
        initparams.put("exclusions","*.js,*.css,/druid/*");
        bean.setinitparameters(initparams);
        //拦截所有请求
        bean.seturlpatterns(arrays.aslist("/*"));
        return  bean;
    }
}

测试,浏览器访问后台

Springboot整合druid

第二种

直接使用案例druid专门为springboot提供的druid-stater依赖,以上传统的druid我们还需自己定义配置类,通过第二种方式只需要引入 druid的start依赖并添加相关的一些配置即可。

引入依赖

<dependency>
		   <groupid>com.alibaba</groupid>
		   <artifactid>druid-spring-boot-starter</artifactid>
		   <version>1.1.10</version>
		</dependency>

配置

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mysql?characterencoding=utf-8&servertimezone=utc&usessl=false
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.driver

    # 使用 druid 作为连接池  更多配置的说明可以参见 druid starter 中文文档 https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
    type: com.alibaba.druid.pool.druiddatasource
    druid:
      # 初始化时建立物理连接的个数。初始化发生在显示调用 init 方法,或者第一次 getconnection 时
      initialsize: 5
      # 最小连接池数量
      minidle: 5
      # 最大连接池数量
      maxactive: 10
      # 获取连接时最大等待时间,单位毫秒。配置了 maxwait 之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置 useunfairlock 属性为 true 使用非公平锁。
      maxwait: 60000
      # destroy 线程会检测连接的间隔时间,如果连接空闲时间大于等于 minevictableidletimemillis 则关闭物理连接。
      timebetweenevictionrunsmillis: 60000
      # 连接保持空闲而不被驱逐的最小时间
      minevictableidletimemillis: 300000
      # 用来检测连接是否有效的 sql 因数据库方言而差, 例如 oracle 应该写成 select 1 from dual
      validationquery: select 1
      # 建议配置为 true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于 timebetweenevictionrunsmillis,执行 validationquery 检测连接是否有效。
      testwhileidle: true
      # 申请连接时执行 validationquery 检测连接是否有效,做了这个配置会降低性能。
      testonborrow: false
      # 归还连接时执行 validationquery 检测连接是否有效,做了这个配置会降低性能。
      testonreturn: false
      # 是否自动回收超时连接
      removeabandoned: true
      # 超时时间 (以秒数为单位)
      remove-abandoned-timeout: 180

      # druid 监控的配置 如果不使用 druid 的监控功能的话 以下配置就不是必须的
      # 本项目监控台访问地址: http://localhost:8080/druid/login.html

      # webstatfilter 用于采集 web-jdbc 关联监控的数据。
      # 更多配置可参见: https://github.com/alibaba/druid/wiki/%e9%85%8d%e7%bd%ae_%e9%85%8d%e7%bd%aewebstatfilter
      web-stat-filter:
        # 是否开启 webstatfilter 默认是 true
        enabled: true
        # 需要拦截的 url
        url-pattern: /*
        # 排除静态资源的请求
        exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"

      # druid 内置提供了一个 statviewservlet 用于展示 druid 的统计信息。
      # 更多配置可参见:https://github.com/alibaba/druid/wiki/%e9%85%8d%e7%bd%ae_statviewservlet%e9%85%8d%e7%bd%ae
      stat-view-servlet:
        #是否启用 statviewservlet 默认值 true
        enabled: true
        # 需要拦截的 url
        url-pattern: /druid/*
        # 允许清空统计数据
        reset-enable: true
        login-username: druid
        login-password: druid



# mybatis 相关配置
mybatis:
    configuration:
      # 当没有为参数提供特定的 jdbc 类型时,为空值指定 jdbc 类型。
      # oracle 数据库建议配置为 jdbctype.null, 默认是 other
      jdbc-type-for-null: 'null'
      # 是否打印 sql 语句 调试的时候可以开启
log-impl: org.apache.ibatis.logging.stdout.stdoutimpl

测试sql监控

在 spring boot 中可以通过 http 接口将 druid 的监控数据以 json 的形式暴露出去,可以用于健康检查等功能:

@restcontroller
public class druidstatcontroller {

    @getmapping("/stat")
    public object druidstat() {
        // druidstatmanagerfacade#getdatasourcestatdatalist 该方法可以获取所有数据源的监控数据
        return druidstatmanagerfacade.getinstance().getdatasourcestatdatalist();
    }
}

Springboot整合druid

默认访问地址为 http://localhost:8080/druid/login.html

Springboot整合druid

至此 完成,有疑问可以关注我的公众号 java一号  联系

个人独立站点: www.javayihao.top

Springboot整合druid