SpringBoot-druid

  1. SpringBoot-druid

9.1 druid简介

Java程序很大一部分要操作数据库,为了提高性能操作数据库,又不得不使用数据库连接池。

Druid 是阿里巴巴开源平台上一个数据库连接池实现,结合了 C3P0、DBCP 等 DB 池的优点,同时加入了日志监控。

Druid 可以很好的监控 DB 池连接和 SQL 的执行情况,天生就是针对监控而生的 DB 连接池。

Druid 已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。

Spring Boot 2.0 以上默认使用 Hikari 数据源,可以说 Hikari 与 Driud 都是当前 Java Web 上最优秀的数据源,我们来重点看看Spring Boot 如何集成 Druid 数据源,如何实现数据库监控。

Github地址:https://github.com/alibaba/druid/

com.alibaba.druid.pool.DruidDataSource 基本配置参数如下:

SpringBoot-druid

9.2 配置数据源

1、添加Druid数据源依赖。


    com.alibaba
    druid
    1.2.8

2、切换数据源

Spring Boot 2.0 以上默认使用 com.zaxxer.hikari.HikariDataSource 数据源,但可以通过 spring.datasource.type 指定数据源。

spring:
  datasource:
    username: root
    password: aadzj
    #如果报错是时区问题 加上 serverTimezone=UTC 就OK
    url: jdbc:mysql://localhost:3306/userdb?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource  #把默认数据源切换成druid

3、输出查看数据源

在测试类中注入 DataSource,然后获取到它,输出一看便知是否成功切换

SpringBoot-druid

4、druid数据源专有配置

切换成功,我们可以设置数据源连接初始化大小、最大连接数、等待时间、最小连接数 等设置项,可以查看源码

spring:
  datasource:
    username: root
    password: aadzj
    #如果报错是时区问题 加上 serverTimezone=UTC 就OK
    url: jdbc:mysql://localhost:3306/userdb?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource

    #druid数据源专有配置
    initialSize: 5
    minIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true

    #配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
    #如果允许报错,java.lang.ClassNotFoundException: org.apache.Log4j.Properity
    #则导入log4j 依赖就行
    filters: stat,wall,log4j
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true
    connectionoProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

5、导入Log4j 的依赖


    log4j
    log4j
    1.2.17

6、DruidDataSource 绑定全局配置文件中的参数

现在需要为DruidDataSource 绑定全局配置文件中的参数,添加到容器中,而不再使用 Spring Boot 的自动生成了

package com.dzj.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

// @Configuration标注为配置类  相当于xml的标签
@Configuration
public class DruidConfig {

    // @ConfigurationProperties用于把application.yaml中配置好的信息(数据源)关联起来
    // @Bean DruidDataSource注册为bean,丢到spring容器中去管理,
    //前缀为 spring.datasource的属性值注入到 com.alibaba.druid.pool.DruidDataSource 的同名参数中
    @ConfigurationProperties(prefix="spring.datasource")
    @Bean
    public DataSource druidDataSource(){
        return new DruidDataSource();
    }

}

7、测试类中测试查看是否成功!

SpringBoot-druid

8、配置Druid数据源监控

Druid 数据源具有监控的功能,并提供了一个 web 界面方便用户查看,类似安装路由器时,人家也提供了一个默认的 web 页面。

第一步需要设置 Druid 的后台管理页面,比如 登录账号、密码 等,配置后台管理

package com.dzj.config;

import com.alibaba.druid.support.http.StatViewServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;

// @Configuration标注为配置类  相当于xml的标签
@Configuration
public class DruidConfig {

    //后台监控 : web.xml,ServletRegistrationBean
    //因为springboot内置了servlet容器,所以没有web.xml,替代方法:ServletRegistrationBean
    @Bean
    public ServletRegistrationBean statViewServlet(){
        ServletRegistrationBean bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");

        // 这些参数可以在 com.alibaba.druid.support.http.StatViewServlet 的父类 com.alibaba.druid.support.http.ResourceServlet 中找到

        //后台需要有人登陆,账号密码配置
        HashMap initParameters = new HashMap<>();
        //添加配置
        initParameters.put("loginUsername","admin"); //登陆的key是固定的(loginUsername和loginPassword)
        initParameters.put("loginPassword","aadzj");
        // 允许谁可以访问
        initParameters.put("allow","");  // value值为空代表所有人都可以访问
        //禁止谁访问
        //initParameters.put("dzj","192.168.1.102");
        bean.setInitParameters(initParameters); //设置初始化参数
        return bean;
    }

}

配置完毕后,我们可以选择访问 :http://localhost:8080/druid/login.html

SpringBoot-druid

输入设置的账号密码登录进入

SpringBoot-druid

9、配置 Druid web 监控 filter 过滤器

package com.dzj.config;

import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

// @Configuration标注为配置类  相当于xml的标签
@Configuration
public class DruidConfig {

    //配置 Druid 监控 之  web 监控的 filter
    //WebStatFilter:用于配置Web和Druid数据源之间的管理关联监控统计
    //filter,设置过滤器
    @Bean
    public FilterRegistrationBean webstatFilter(){
        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setFilter(new WebStatFilter());
        //可以过滤哪些请求呢?
        Map initParameters = new HashMap<>();
        initParameters.put("exclusions","*.js,*.css,/druid/*"); //这些东西不进行统计
        bean.setInitParameters(initParameters);
        return bean;
    }
}

平时在工作中,按需求进行配置即可,主要用作监控!

Original: https://www.cnblogs.com/aadzj/p/15636745.html
Author: 小公羊
Title: SpringBoot-druid

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/612309/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Git 代码提交和下载

    1、新建一个目录,存放下载下来的项目; 2、进入刚刚新建的文件夹,点击鼠标右键,选择”Git Bash Here” 3、进行基础配置,作为 Git 的基础配…

    Linux 2023年6月13日
    0122
  • MIT6.824 Lab2调试过程

    2021-12-12 21:50 测试了5次,通过了并发用例。运行并发的用例的时候,会报第6个entry没有被三个节点中的任意一个apply。 看了看日志,发现第6个entry一直…

    Linux 2023年6月7日
    0101
  • UWP graphql-dotnet新版数据查询客户端的实现

    之前写过一篇文章 UWP GraphQL数据查询客户端的实现,这次的标题基本差不多,只不过微软这个graphql-dotnet repo从1.x升级到了3.x,跨度有点大。 如果你…

    Linux 2023年6月13日
    089
  • redis

    PHP-redis:http://pecl.php.net/package/redis PHP-redis中文文档(redis各种方法介绍):http://www.cnblogs….

    Linux 2023年5月28日
    088
  • Centos7.9、Ubuntu操作系统图文安装

    镜像下载、域名解析、时间同步请点击阿里云开源镜像站 一、环境准备 1、镜像包 CentOS-7.9-x86_64-DVD-2009.isoubuntu-18.04.6-server…

    Linux 2023年5月27日
    088
  • 深入Go Map的使用技巧

    原文链接:https://www.zhoubotong.site/post/60.html之前写过一篇文章,Go map定义的几种方式以及修改技巧,今天发现还可以深入探讨下开发中容…

    Linux 2023年6月6日
    0122
  • 软件工程 结构法方法 第2篇随笔

    建立系统的功能模型图 首先:建立系统环境图,确定系统边界 其中: 数据流为:销售的商品,日销售额等;三个输入流,三个输出流 ​ 数据源为:营业员,经理,收款员 ​ 数据潭为:经理,…

    Linux 2023年6月7日
    0101
  • python 正则匹配

    正则匹配 现公司要开发一个业务管理系统,要求注册环节的密码需要提示用户其安全等级,密码按如下规则进行计分,并根据不同的得分为密码进行安全等级划分;此外,密码的组成可以由字母,数字,…

    Linux 2023年6月8日
    0100
  • 特殊进制

    //0xaaaaaaaa = 10101010101010101010101010101010 (偶数位为1,奇数位为0) //0x55555555 = 1010101010101…

    Linux 2023年6月13日
    0102
  • 防火墙NAT+DHCP+ACL+ACAP

    任务要求: SwitchA作为有线终端网关与DHCP Server,为无线终端与有线终端分配IP地址,并配置ACL访问控制列表控制不同用户的访问权限,客户机只能跟DMZ区域服务器互…

    Linux 2023年6月7日
    079
  • Debian中CodeIgniter+nginx+MariaDB+phpMyAdmin配置

    本文不讲述软件安装过程,记述本人在Debia 中配置CodeIgniter 时遇到的问题及解决方法,希望能够为有需要的人提供帮助。 一、Debian版本及所需的软件 Debian …

    Linux 2023年6月13日
    0100
  • FastDFS安装和简介详细总结

    1、fastDFS简介 1 FastDFS是用c语言编写的一款开源的分布式文件系统。 2 FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用…

    Linux 2023年6月7日
    0122
  • Docker 安装 MySQL、Redis

    1 Docker 中安装 Redis 1.1 创建目录 在硬盘上创建 redis 的数据目录: mkdir -p /Users/yygnb/dockerMe/redis/data …

    Linux 2023年6月7日
    0104
  • 文件权限问题导致plink报错 Failed to open 21JAN.log. Try changing the –out parameter.

    晚上起来,想想一直没有解决的问题,所以复制一个目录,开始运行数据,但到了第一步就挖坑 [En] Rise in the evening, think of the problems…

    Linux 2023年5月27日
    076
  • Linux软件包常见的几种下载、安装方法

    如果服务器是处于在线状态,在使用默认下载源是外国的情况下,安装更新软件包往往会比较痛苦的存在,下载了许久来一个超时就gg了。国内有许多镜像源,完美的解决了这个问题。 对于rpm系列…

    Linux 2023年6月6日
    089
  • python一键探测编码

    程序功能 按文件输出编码or按编码输出文件 源码 主要代码功能 1.实现文件遍历 2.chardet获取编码 3.传参,对符合编码条件的文件输出 4.打开文件夹选择对话框 程序功能…

    Linux 2023年6月7日
    0127
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球