Durid+springboot

DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池,据说是目前最好的连接池。

java实现的数据库连接池有很多,c3p0,dbcp等,还有号称速度最快的HikariCP,并且springboot2.0.2版本默认使用的就是HikariCP。
为什么选用Druid呢?

  • 性能够好,比c3p0,dbcp强一些
  • 经过考验,毕竟是阿里开源出来的项目
  • 最关键的是带一个建议的数据库监控

一共两种方式配置Durid,一种只需要配置application.properties,另一种再此基础上还需创建配置类,maven依赖不同



1.只需要配置application.properties的方式(推荐)

  • I.maven
        
            com.alibaba
            druid-spring-boot-starter
            1.1.9
        
  • II.application.properties
#基础的四件套
spring.datasource.url=jdbc:mysql://localhost:3306/mybatisplus?autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456

#配置durid连接池
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.maxActive=20
spring.datasource.druid.maxWait=60000
spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
spring.datasource.druid.minEvictableIdleTimeMillis=300000
spring.datasource.druid.validationQuery=SELECT 1 FROM DUAL
spring.datasource.druid.testWhileIdle=true
spring.datasource.druid.testOnBorrow=false
spring.datasource.druid.testOnReturn=false
spring.datasource.druid.poolPreparedStatements=true
spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20
#stat是统计,wall是SQL防火墙,防SQL注入的,
#如果写输出统计数据的日志类型一定系统确实有的,比如系统用的log4j,但是你写log4j2,那就会报错
spring.datasource.druid.filters=stat,wall
spring.datasource.druid.connectionProperties=druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000

# WebStatFilter配置,监控统计用的filter:stat,如果没有配置filter信息。session监控,web监控等不可用。
#是否启用StatFilter默认值true
spring.datasource.druid.web-stat-filter.enabled=true
spring.datasource.druid.web-stat-filter.url-pattern=/*
spring.datasource.druid.web-stat-filter.session-stat-enable=true 
spring.datasource.druid.web-stat-filter.session-stat-max-count=100
#设置不统计哪些URL
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*

# StatViewServlet配置,防御sql注入的filter:wall,配置Druid Monitor信息
# 是否启用StatFilter默认值true,不开就会默认配置
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
spring.datasource.druid.stat-view-servlet.allow=127.0.0.1,192.168.163.1
spring.datasource.druid.stat-view-servlet.deny=192.168.1.73
spring.datasource.druid.stat-view-servlet.reset-enable=false
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=123456

# Spring监控,对内部各接口调用的监控
spring.datasource.druid.aop-patterns=com.sun.demo.mapper.*,com.sun.demo.controller.*
  • III.当然也可以继续创建配置类进行配置


2.需要创建配置类的方式

  • I.maven
        
            com.alibaba
            druid
            ${druid.version}
        
        或者,二者选一
        
            com.alibaba
            druid-spring-boot-starter
            1.1.9
        
  • II.application.properties
#基础的五件套
spring.datasource.url=jdbc:mysql://localhost:3306/mybatisplus?autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456

#配置durid连接池
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
# 打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.filters=stat,wall
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

# druid监控界面的账户和密码
druid.login.user_name=root
druid.login.password=123456
  • III.DruidConfiguration.java
package com.sun.demo.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;

/**
 * druid 配置.
 * 

* 这样的方式不需要添加注解:@ServletComponentScan * * @author Administrator */ @Configuration public class DruidConfiguration { @Value("${druid.login.user_name}") private String userName; @Value("${druid.login.password}") private String password; /**必须配置数据源,不然无法获取到sql监控,与sql防火墙监控*/ @Bean @ConfigurationProperties(prefix="spring.datasource") public DataSource druidDataSource() { DruidDataSource datasource = new DruidDataSource(); return datasource; } /** * 注册 Servlet,配置 Druid Monitor,如果没有servlet,则无法通过web页面查看监控数据。 * @return */ @Bean public ServletRegistrationBean DruidStatViewServle() { //org.springframework.boot.context.embedded.ServletRegistrationBean提供类的进行注册. ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*"); //白名单: servletRegistrationBean.addInitParameter("allow", "127.0.0.1"); //IP黑名单 (存在共同时,deny优先于allow) : 如果满足deny的话提示:Sorry, you are not permitted to view this page. servletRegistrationBean.addInitParameter("deny", "192.168.1.73"); //登录查看信息的账号密码. servletRegistrationBean.addInitParameter("loginUsername", userName); servletRegistrationBean.addInitParameter("loginPassword", password); //是否能够重置数据. servletRegistrationBean.addInitParameter("resetEnable", "false"); return servletRegistrationBean; } /** * 注册一个:filterRegistrationBean,如果没有配置filter信息。session监控,web监控等不可用。 * @return */ @Bean public FilterRegistrationBean druidStatFilter() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter()); //添加过滤规则. filterRegistrationBean.addUrlPatterns("/*"); //添加不需要忽略的格式信息. filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); return filterRegistrationBean; } }


测试

这里先启动应用,然后在浏览器输入http://127.0.0.1:8080/druid/index.html,就会显示登录页面,输入上面类配置的密码即可登录.


3.spring监控

Druid提供了Spring和Jdbc的关联监控,基于spring AOP实现,可通过类型、方法名等多种方法配置拦截,其详细说明可以点击这里查看,以下示例为按方法名正则匹配拦截的配置:
这里我对mapper包下的进行监控配置下面一行代码即可搞定。

spring.datasource.druid.aop-patterns=com.sun.demo.mapper.*
Durid+springboot_第1张图片

Durid+springboot_第2张图片

4.Druid中使用log4j2进行日志输出
在druid配置文件中修改和添加

#指定log4j2为日志输出,不写也行,因为安装log4j2时已经把默认自带的日志删除了,现在系统默认为log4j2
#可以写log4j2,可以不写,但是不可以写log4j,反之也一样
spring.datasource.druid.filters=stat,wall,log4j2

# 配置日志输出
spring.datasource.druid.filter.slf4j.enabled=true
spring.datasource.druid.filter.slf4j.statement-create-after-log-enabled=false
spring.datasource.druid.filter.slf4j.statement-close-after-log-enabled=false
spring.datasource.druid.filter.slf4j.result-set-open-after-log-enabled=false
spring.datasource.druid.filter.slf4j.result-set-close-after-log-enabled=false

在log4j2的配置文件中添加

       
        
            
        
        
            
        

一个主从的druid的配置,可以参考参考 application-druid.yml,yml格式,和properties很不同

# 数据源配置
spring:
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: com.mysql.cj.jdbc.Driver
        druid:
            # 主库数据源
            master:
                url: jdbc:mysql://localhost:3306/numone-springboot?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                username: root
                password: 123456
            # 从库数据源
            slave:
                # 从数据源开关/默认关闭
                enabled: false
                url: 
                username: 
                password: 
            # 初始连接数
            initialSize: 5
            # 最小连接池数量
            minIdle: 10
            # 最大连接池数量
            maxActive: 20
            # 配置获取连接等待超时的时间
            maxWait: 60000
            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
            timeBetweenEvictionRunsMillis: 60000
            # 配置一个连接在池中最小生存的时间,单位是毫秒
            minEvictableIdleTimeMillis: 300000
            # 配置一个连接在池中最大生存的时间,单位是毫秒
            maxEvictableIdleTimeMillis: 900000
            # 配置检测连接是否有效
            validationQuery: SELECT 1 FROM DUAL
            testWhileIdle: true
            testOnBorrow: false
            testOnReturn: false      
            statViewServlet:
                enabled: true
                url-pattern: /monitor/druid/*
            filter:
                stat:
                    # 慢SQL记录
                    log-slow-sql: true
                    slow-sql-millis: 1000
                    merge-sql: true
                wall:
                    config:
                        multi-statement-allow: true


启蒙
https://www.jianshu.com/p/4a8e56f557ea
https://my.oschina.net/u/1011854/blog/1790490
关于配置文件:
https://blog.csdn.net/justlpf/article/details/80728529
https://www.jianshu.com/p/d365ddce6b73

你可能感兴趣的:(Durid+springboot)