SpringBoot实践之---Druid连接池的使用和监控配置

Druid介绍(来源网络) 

Druid是一个JDBC组件,druid 是阿里开源在 github 上面的数据库连接池,它包括三部分: 
* DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。 
* DruidDataSource 高效可管理的数据库连接池。 
* SQLParser 专门解析 sql 语句

Druid 有什么优点?
1. 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。 
2. 替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。 
3. 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。 
4. SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。 
5. 扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter-Chain机制,很方便编写JDBC层的扩展插件。 
项目地址: https://github.com/alibaba/druid 
Druid 问题集(中文文档):https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

Springboot版本用的1.5.8,用的gradle

MySQL Driver驱动包:

dependencies {
	compile('mysql:mysql-connector-java')
}
 Spring Boot的JPA依赖包:

dependencies {
	compile('org.springframework.boot:spring-boot-starter-data-jpa')
}
   阿里系的Druid依赖包:

dependencies {
	//druid
	compile('com.alibaba:druid:1.0.25')
}
 Spring Boot中的application.properties配置信息:

# 数据库访问配置
# 主数据源,默认的
#spring.datasource.type=com.alibaba.druid.pool.DruidDataSource 这个Springboot不支持 druid
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.19.139:3306/smm_test?useUnicode\=true&characterEncoding\=utf-8
spring.datasource.username=root
spring.datasource.password=smm123456
# 下面为连接池的补充设置,应用到上面所有数据源中
# 初始化大小,最小,最大
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,log4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个DruidDataSource的监控数据
#spring.datasource.useGlobalDataSourceStat=true

  目前Spring Boot中默认支持的连接池有dbcp,dbcp2, tomcat, hikari三种连接池。Druid暂时不在Spring Bootz中的直接支持,因此需要进行配置信息的定制(之前参考晚上其他配置都不行,就是因为少了定制化DataSource来实现,坑死人了


package com.ceiec.webinsight.utils.druid;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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 org.springframework.context.annotation.Primary;

import javax.sql.DataSource;
import java.sql.SQLException;
/**
 * CreateDate:2018/1/10
 * Author:wenliang
 * Description: 该类主要用于Druid数据库连接监控配置类
 */
@Configuration
public class DruidConfiguration {

    private static final Logger logger = LoggerFactory.getLogger(DruidConfiguration.class);

    private static final String DB_PREFIX = "spring.datasource";

    @Bean
    public ServletRegistrationBean druidServlet() {
        logger.info("init Druid Servlet Configuration ");
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
// IP白名单
        servletRegistrationBean.addInitParameter("allow", "192.168.2.25,127.0.0.1");
// IP黑名单(共同存在时,deny优先于allow)
        servletRegistrationBean.addInitParameter("deny", "192.168.1.100");
//控制台管理用户
        servletRegistrationBean.addInitParameter("loginUsername", "admin");
        servletRegistrationBean.addInitParameter("loginPassword", "123456");
//是否能够重置数据 禁用HTML页面上的“Reset All”功能
        servletRegistrationBean.addInitParameter("resetEnable", "false");
        return servletRegistrationBean;
    }

    @Bean
    public FilterRegistrationBean filterRegistrationBean() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
        filterRegistrationBean.addUrlPatterns("/*");
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
DruidDBConfig类被@Configuration标注,用作配置信息; DataSource对象被@Bean声明,为Spring容器所管理, @Primary表示这里定义的DataSource将覆盖其他来源的DataSource。
  

最后启动Springboot的项目,登录浏览器访问




可以查询SQL监控 和 SQL防火墙以及 URL监控了:



补充1----

FilterRegistrationBean filterRegistrationBean()类中

加入

        //配置profileEnable能够监控单个url调用的sql列表
        filterRegistrationBean.addInitParameter("profileEnable", "true");

则页面增加针对每个访问Url的对应sql统计:



补充2---

合并多个DruidDataSource的监控数据

缺省多个DruidDataSource的监控数据是各自独立的,在Druid-0.2.17版本之后,支持配置公用监控数据,配置参数为useGlobalDataSourceStat。例如:

  <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
  	... ...
  	<property name="useGlobalDataSourceStat" value="true" />
  </bean>

或者通过jvm启动参数来指定,例如:

  -Ddruid.useGlobalDataSourceStat=true

全部使用jvm启动参数来配置,可以这样:

  -Ddruid.filters=mergeStat -Ddruid.useGlobalDataSourceStat=true

补充3----

Spring Boot默认的数据源是:org.apache.tomcat.jdbc.pool.DataSource


spring.datasource.type 新版本也废弃了这个属性,配置完之后启动就会报错,所以现在知道的情况是1.2版本不支持,1.3版本支持,1.4版本不支持,1.5版本不支持


更多使用和常见问题

详见:https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

本文只是简单的对如何使用Druid做了说明,其实官方包括各种很细致的说明,建议大家还是多看看官方说明以官方为准,国人开发的说明自然也都是中文,通俗易懂。


官方资料直达地址:

Druid 首页 
https://github.com/alibaba/druid/wiki/%E9%A6%96%E9%A1%B5

Druid 常见问题 
https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

Druid 发布版 
https://github.com/alibaba/druid/releases

Druid 源码 
https://github.com/alibaba/druid




参考资料:

 

Druid连接池以及在springboot下配置













  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值