您当前的位置: 首页 >  ui

SpringBoot2 综合案例(12):集成Druid连接池,配置监控界面

蔚1 发布时间:2019-09-15 23:30:32 ,浏览量:2

Spring Boot 2 基础案例篇

包含:入门、日志管理、定时器、事务、AOP、数据库、缓存、NoSQL、监控、打包。

Spring Boot 2 高级案例篇

包含:整合常用中间件:分库分表、权限管理、Redis 集群、Dubbo、消息队列、定时器、搜索引擎、文件管理、邮件等

Druid 连接池 druid 简介

Druid 连接池是阿里巴巴开源的数据库连接池项目。Druid 连接池为监控而生,内置强大的监控功能,监控特性不影响性能。功能强大,能防 SQL 注入,内置 Loging 能诊断 Hack 应用行为。

Druid 连接池是阿里巴巴内部唯一使用的连接池,在内部数据库相关中间件 TDDL/DRDS 都内置使用强依赖了 Druid 连接池,经过阿里内部数千上万的系统大规模验证,经过历年双十一超大规模并发验证。

druid 特点
1)稳定性特性,阿里巴巴的业务验证2)完备的监控信息,快速诊断系统的瓶颈3)内置了 WallFilter 提供防 SQL 注入功能
整合 SpringBoot2 框架 引入核心依赖
    mysql    mysql-connector-java    5.1.21    com.alibaba    druid-spring-boot-starter    1.1.13    org.springframework.boot    spring-boot-starter-jdbc
数据源配置文件
spring:  application:    # 应用名称    name: node07-boot-druid  datasource:    type: com.alibaba.druid.pool.DruidDataSource    druid:      driverClassName: com.mysql.jdbc.Driver      url: jdbc:mysql://localhost:3306/data_one?useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull&useSSL=false      username: root      password: 123      initial-size: 10      max-active: 100      min-idle: 10      max-wait: 60000      pool-prepared-statements: true      max-pool-prepared-statement-per-connection-size: 20      time-between-eviction-runs-millis: 60000      min-evictable-idle-time-millis: 300000      max-evictable-idle-time-millis: 60000      validation-query: SELECT 1 FROM DUAL      # validation-query-timeout: 5000      test-on-borrow: false      test-on-return: false      test-while-idle: true      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000      #filters: #配置多个英文逗号分隔(统计,sql 注入,log4j 过滤)      filters: stat,wall      stat-view-servlet:        enabled: true        url-pattern: /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.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 数据库连接池配置文件 */@Configurationpublic 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 监控界面     */    @Bean    public ServletRegistrationBean statViewServlet(){        ServletRegistrationBean srb =                new ServletRegistrationBean(new StatViewServlet(),"/druid/*");        //设置控制台管理用户        srb.addInitParameter("loginUsername","root");        srb.addInitParameter("loginPassword","root");        //是否可以重置数据        srb.addInitParameter("resetEnable","false");        return srb;    }    @Bean    public FilterRegistrationBean statFilter(){        //创建过滤器        FilterRegistrationBean frb =                new FilterRegistrationBean(new WebStatFilter());        //设置过滤器过滤路径        frb.addUrlPatterns("/*");        //忽略过滤的形式        frb.addInitParameter("exclusions",                "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");        return frb;    }}
简单测试类
@RestControllerpublic class DruidController {    private static final Logger LOG = LoggerFactory.getLogger(DruidController.class);    @Resource    private JdbcTemplate jdbcTemplate ;    @RequestMapping("/druidData")    public String druidData (){        String sql = "SELECT COUNT(1) FROM d_phone" ;        Integer countOne = jdbcTemplate.queryForObject(sql,Integer.class) ;        // countOne==2        LOG.info("countOne=="+countOne);        return "success" ;    }}
监控效果图解

完成一次数据请求后,访问如下链接。在这里插入图片描述

http://localhost:8007/druid输入配置的用户名和密码:root root
Druid 监控首页

主要展示链接数据库的基础信息。在这里插入图片描述

Druid 监控数据源

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

Druid 监控 SQL 执行

所有执行的 SQL,都会在这里被监控到,且会有 SQL 执行的详细计划。在这里插入图片描述

源代码地址
GitHub·地址https://github.com/cicadasmile/spring-boot-baseGitEE·地址https://gitee.com/cicadasmile/spring-boot-base

本文首发于 GitChat,未经授权不得转载,转载需与 GitChat 联系。

阅读全文: http://gitbook.cn/gitchat/activity/5d7e2d5ae5a77a6ad31da6cf

您还可以下载 CSDN 旗下精品原创内容社区 GitChat App ,阅读更多 GitChat 专享技术内容哦。

FtooAtPSkEJwnW-9xkCLqSTRpBKX

关注
打赏
1688896170
查看更多评论

蔚1

暂无认证

  • 2浏览

    0关注

    4645博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.1007s