一、Druid连接池

1、druid简介

Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。功能强大,能防SQL注入,内置Loging能诊断Hack应用行为。
Druid连接池是阿里巴巴内部唯一使用的连接池,在内部数据库相关中间件TDDL/DRDS 都内置使用强依赖了Druid连接池,经过阿里内部数千上万的系统大规模验证,经过历年双十一超大规模并发验证。

2、druid特点

1)稳定性特性,阿里巴巴的业务验证
2)完备的监控信息,快速诊断系统的瓶颈
3)内置了WallFilter 提供防SQL注入功能

二、整合SpringBoot2.0框架

1、引入核心依赖

<!-- 数据库依赖 -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.21</version>
</dependency>
<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.13</version>
</dependency>
<!-- JDBC 依赖 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

2、数据源配置文件

spring:application:# 应用名称name: node07-boot-druiddatasource:type: com.alibaba.druid.pool.DruidDataSourcedruid:driverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/data_one?useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull&useSSL=falseusername: rootpassword: 123initial-size: 10max-active: 100min-idle: 10max-wait: 60000pool-prepared-statements: truemax-pool-prepared-statement-per-connection-size: 20time-between-eviction-runs-millis: 60000min-evictable-idle-time-millis: 300000max-evictable-idle-time-millis: 60000validation-query: SELECT 1 FROM DUAL# validation-query-timeout: 5000test-on-borrow: falsetest-on-return: falsetest-while-idle: trueconnectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000#filters: #配置多个英文逗号分隔(统计,sql注入,log4j过滤)filters: stat,wallstat-view-servlet:enabled: trueurl-pattern: /druid/*

3、核心配置类

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.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
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.jdbc.core.JdbcTemplate;/*** Druid数据库连接池配置文件*/
@Configuration
public class DruidConfig {private static final Logger logger = LoggerFactory.getLogger(DruidConfig.class);@Value("${spring.datasource.druid.url}")private String dbUrl;@Value("${spring.datasource.druid.username}")private String username;@Value("${spring.datasource.druid.password}")private String password;@Value("${spring.datasource.druid.driverClassName}")private String driverClassName;@Value("${spring.datasource.druid.initial-size}")private int initialSize;@Value("${spring.datasource.druid.max-active}")private int maxActive;@Value("${spring.datasource.druid.min-idle}")private int minIdle;@Value("${spring.datasource.druid.max-wait}")private int maxWait;@Value("${spring.datasource.druid.pool-prepared-statements}")private boolean poolPreparedStatements;@Value("${spring.datasource.druid.max-pool-prepared-statement-per-connection-size}")private int maxPoolPreparedStatementPerConnectionSize;@Value("${spring.datasource.druid.time-between-eviction-runs-millis}")private int timeBetweenEvictionRunsMillis;@Value("${spring.datasource.druid.min-evictable-idle-time-millis}")private int minEvictableIdleTimeMillis;@Value("${spring.datasource.druid.max-evictable-idle-time-millis}")private int maxEvictableIdleTimeMillis;@Value("${spring.datasource.druid.validation-query}")private String validationQuery;@Value("${spring.datasource.druid.test-while-idle}")private boolean testWhileIdle;@Value("${spring.datasource.druid.test-on-borrow}")private boolean testOnBorrow;@Value("${spring.datasource.druid.test-on-return}")private boolean testOnReturn;@Value("${spring.datasource.druid.filters}")private String filters;@Value("{spring.datasource.druid.connection-properties}")private String connectionProperties;/*** Druid 连接池配置*/@Bean     //声明其为Bean实例public DruidDataSource dataSource() {DruidDataSource datasource = new DruidDataSource();datasource.setUrl(dbUrl);datasource.setUsername(username);datasource.setPassword(password);datasource.setDriverClassName(driverClassName);datasource.setInitialSize(initialSize);datasource.setMinIdle(minIdle);datasource.setMaxActive(maxActive);datasource.setMaxWait(maxWait);datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);datasource.setMaxEvictableIdleTimeMillis(minEvictableIdleTimeMillis);datasource.setValidationQuery(validationQuery);datasource.setTestWhileIdle(testWhileIdle);datasource.setTestOnBorrow(testOnBorrow);datasource.setTestOnReturn(testOnReturn);datasource.setPoolPreparedStatements(poolPreparedStatements);datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);try {datasource.setFilters(filters);} catch (Exception e) {logger.error("druid configuration initialization filter", e);}datasource.setConnectionProperties(connectionProperties);return datasource;}/*** JDBC操作配置*/@Bean(name = "dataOneTemplate")public JdbcTemplate jdbcTemplate (@Autowired DruidDataSource dataSource){return new JdbcTemplate(dataSource) ;}/*** 配置 Druid 监控界面*/@Beanpublic ServletRegistrationBean statViewServlet(){ServletRegistrationBean srb =new ServletRegistrationBean(new StatViewServlet(),"/druid/*");//设置控制台管理用户srb.addInitParameter("loginUsername","root");srb.addInitParameter("loginPassword","root");//是否可以重置数据srb.addInitParameter("resetEnable","false");return srb;}@Beanpublic FilterRegistrationBean statFilter(){//创建过滤器FilterRegistrationBean frb =new FilterRegistrationBean(new WebStatFilter());//设置过滤器过滤路径frb.addUrlPatterns("/*");//忽略过滤的形式frb.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");return frb;}
}

4、简单测试类

@RestController
public class DruidController {private static final Logger LOG = LoggerFactory.getLogger(DruidController.class);@Resourceprivate JdbcTemplate jdbcTemplate ;@RequestMapping("/druidData")public String druidData (){String sql = "SELECT COUNT(1) FROM d_phone" ;Integer countOne = jdbcTemplate.queryForObject(sql,Integer.class) ;// countOne==2LOG.info("countOne=="+countOne);return "success" ;}
}

三、测试效果

完成一次数据请求后,访问如下链接。

http://localhost:8007/druid
输入配置的用户名和密码:
root root

1、Druid监控首页

主要展示链接数据库的基础信息。

2、Druid监控数据源

连接池配置的各项详细属性,可以参考这里查看,无需再从网上查找。

3、Druid监控SQL执行

所有执行的SQL,都会在这里被监控到,且会有SQL执行的详细计划。

四、源代码

GitHub地址:知了一笑
https://github.com/cicadasmile/spring-boot-base
码云地址:知了一笑
https://gitee.com/cicadasmile/spring-boot-base


SpringBoot2.0 基础案例(07):集成Druid连接池,配置监控界面相关推荐

  1. SpringBoot2.0 基础案例(12):基于转账案例,演示事务管理操作

    本文源码 GitHub地址:知了一笑 https://github.com/cicadasmile/spring-boot-base 一.事务管理简介 1.事务基本概念 一组业务操作ABCD,要么全部 ...

  2. SpringBoot2.0基础案例分类总结,后续更新计划说明

    一.基础案例 1.基础案例概览 历时一个半月,SpringBoot2.0基础案例的文章基本更新完毕了,基础案例包含了SpringBoot的基础教程,高级应用,日志配置,数据库使用,事务管理等.关于Sp ...

  3. mybatisplus 集成druid连接池源码分析

    mybatisplus 集成druid连接池源码分析:从spring的源码过渡到druid的相关jar包,里面是druid相关的类,下面我们开始分析: 1.取数据库连接的地方入口:public abs ...

  4. alibaba的druid连接池的监控的两种方法

    alibaba的druid连接池的监控的两种场景 一.导入druid包,适用spring.springboot 1.导包(版本自选) 这里省略了数据库的其他包只关注druid的相关 <depen ...

  5. spring配置druid连接池和监控数据库访问性能

    Druid连接池及监控在spring配置如下: [html] view plaincopy <bean id="dataSource" class="com.ali ...

  6. Spring学习总结(12)——Druid连接池及监控在spring配置

    Druid连接池及监控在 spring 配置如下: <bean  id="dataSource" class="com.alibaba.druid.pool.Dru ...

  7. SpringBoot2.0 基础案例(10):整合Mybatis框架,集成分页助手插件

    一.Mybatis框架 1.mybatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获 ...

  8. JDBC的API与德鲁伊Druid连接池配置

    JDBC的API DriverManager  : 管理驱动,创建连接. Connection : 一个数据库连接,通过connection获取statement对象 Statement : 执行sq ...

  9. springboot druid连接池配置

    druid连接池的参数,基本上没有问题,这个参数配置经过1秒,10000个请求的插入测试,正常,如果管理系统类型的话,完全够用了 server: port: 8083 spring: datasour ...

最新文章

  1. error 4 in libc-2.12.so 解决办法
  2. 开源视频会议bigbluebutton
  3. 信息学奥赛C++语言:火柴盒
  4. idea Error:(1, 10) java: 需要class, interface或enum, 未结束的字符串文字,Error:(55, 136) java: 非法字符: \65533...
  5. POI实现大数据EXCLE导入导出,解决内存溢出问题
  6. zookeeper 进入客户端_Zookeeper基础知识简单介绍
  7. Oracle学习 实战心得总结
  8. 迈克菲实验室:Flame病毒的深度分析
  9. C语言程序设计 利用数组处理批量数据
  10. python空值填充_pandas妙招之 DataFrame基础运算以及空值填充
  11. 搭建hadoop集群,从安装虚拟机开始直到hadoop成功搭建
  12. 数字信号处理实验(五)—— 心电信号处理 IIR FIR滤波综合题(上篇)
  13. Resin配置https
  14. 计算机共享后无法访问什么原因,共享文件在对方电脑无法访问是怎么回事?
  15. 如何查看自己windows电脑的IP地址
  16. 阿里网盘“该文件类型暂时不支持分享”解决方案
  17. WSUS无法发现客户端
  18. 数独解法-变形数独(第一讲:介绍)
  19. Intriguing Properties of Contrastive Losses
  20. pycharm设置中文,字体颜色修改,设置背景图片(图文讲解)

热门文章

  1. 扩展Linux分区的一种方法
  2. 完全背包——方案个数 UVA11137 Ingenuous Cubrency
  3. 8-2:C++继承之父类和子类对象赋值转换(公有继承)也即切片
  4. QT中生成字符串md5的方法
  5. windows下使用net-snmp实现agent扩展(四)
  6. glxinfo: not found
  7. Linux报错:/etc/sudoers is world writable
  8. C/C++vsnprintf用法(要配合va_list使用)
  9. 分布式网络游戏百万人同时在线服务器架构实现
  10. UIAlertController 大坑