Druid数据库连接池介绍与使用

一、简要介绍

   Druid数据源连接池来源于阿里巴巴,是淘宝和支付宝专用数据库连接池。事实上,它不仅仅是一个数据库连接池,还包含一个ProxyDriver、一系列内置的JDBC组件库、一个 SQL Parser。支持所有JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等等。Druid针对Oracle和MySql做了特别优化,比如Oracle的PSCache内存占用优化,MySql的ping检测优化。Druid提供了诸如MySql、Oracle、Postgresql、SQL-92等SQL语句的完美支持,是一个手写的高性能SQL Parser,支持Visitor模式,使得分析SQL的抽象语法树很方便。它执行简单SQL语句耗时在10微秒以内,对于复杂的SQL语句耗时也在30微秒左右。另外,通过Druid提供的SQL Parser可以在JDBC层面上拦截SQL并进行相应处理,比如说分库分表、SQL安全审计等。Druid也能防御SQL注入攻击,WallFilter就是通过Druid的SQL Parser分析语义实现的。

二、实例demo测试

   1、首先添加Druid依赖,访问 [mvnrepository.com/artifact/com.alibaba/druid(http://mvnrepository.com/artifact/com.alibaba/druid) 

选择需要的版本,复制maven内容到pom.xml

   2、添加Druid配置到application.yml中,核心代码如下,可直接复制使用:

···
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8
driver-class-name: com.mysql.jdbc.Driver
username: root
password: root

配置监控统计拦截的filters,去掉后监控界面sql将无法统计,“wall”用于防火墙

filters: stat,wall,log4j

最大活跃数

maxActive: 20

初始化数量

initialSize: 1

最大连接等待超时时间

maxWait: 60000

打开PSCache,并且制定每个连接PSCache的大小

poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20

通过connectionProperties属性打开mergeSql功能;慢sql记录

connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
minldle: 1
timeBetweenEvictionRunsMillis: 60000
minEvictableldleTimeMillis: 300000
validationQuery: select 1 from dual
testWhileldle: true
testOnBorrow: false
testOnReturn: false
type: com.alibaba.druid.pool.DruidDataSource
···
3、开启Druis监控功能,新建类DruidConfiguration.java
···
package com.wj.demo1;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
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;
@Configuration
public class DruidConfiguration {
@Bean
public ServletRegistrationBean statViewServlet(){
//创建servlet注册实体
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/");
//设置ip白名单
servletRegistrationBean.addInitParameter("allow","127.0.0.1");
//设置控制台管理用户
servletRegistrationBean.addInitParameter("loginUsername","druid");
servletRegistrationBean.addInitParameter("loginPassword","123456");
//是否可以重置数据
servletRegistrationBean.addInitParameter("resetEnable","false");
return servletRegistrationBean;
}
@Bean
public FilterRegistrationBean statFileter(){
//创建过滤器
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean((new WebStatFilter()));
//设置过滤器过滤路径
filterRegistrationBean.addUrlPatterns("/
");
//忽略过滤的形式
filterRegistrationBean.addInitParameter("exclusions",".js.gif,.jpg,.png,.css,.ico,/druid/*");
return filterRegistrationBean;
}
}
···
4、运行项目, 项目运行成功后,我们要访问Druid的监控界面,访问地址:127.0.0.1:8080/d ruid/login.html 到达登录页面,

输入DruidConfiguration.java中配置的用户名和密码,即可登录到我们的服务器监控页面

我们已经成功的访问到了监控首页,可以看到大致包含了如下几个模块:数据源、SQL监控、SQL防火墙、Web应用、URI监控、Session监控、JSONAPI等。

数据源

可以看到项目中管理的所有数据源配置的详细情况,除了密码没有显示外其他都在。

SQL监控

可以查看所有的执行sql语句

SQL防火墙

druid提供了黑白名单的访问,可以清楚的看到sql防护情况。

Web应用

可以看到目前运行的web程序的详细信息。

URI监控

可以监控到所有的请求路径的请求次数、请求时间等其他参数。

Session监控

可以看到当前的session状况,创建时间、最后活跃时间、请求次数、请求时间等详细参数。

JSONAPI

通过api的形式访问Druid的监控接口,api接口返回Json形式数据。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容