springboot 集成driud

news2024/11/29 11:30:44

druid官方文档

导入jar包

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid-spring.version}</version>
</dependency>

配置数据源

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
    # 配置连接池
    druid:
      aop-patterns: com.wdz.boot.*  # 监控包路径下的bean
      filters: stat,wall,slf4 # 开启的功能:stat:sql监控,wall:防火墙,日志
      stat-view-servlet: # 配置架空页面功能
        enabled: true # 开启页面监控
        login-username: admin
        login-password: 123456
      web-stat-filter: # web监控、uri功能
        enabled: true
        url-pattern: /*
        exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'

访问:http://localhost:8080/druid

这个配置默认是关闭的,在yml中开启

分析

由于jar包是 spring-boot-starter
所以springboot给druid有自动配置功能
找到druid的依赖

数据源主要配置类:DataSourceAutoConfiguration

/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.alibaba.druid.spring.boot.autoconfigure;

import javax.sql.DataSource;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties;
import com.alibaba.druid.spring.boot.autoconfigure.stat.DruidFilterConfiguration;
import com.alibaba.druid.spring.boot.autoconfigure.stat.DruidSpringAopConfiguration;
import com.alibaba.druid.spring.boot.autoconfigure.stat.DruidStatViewServletConfiguration;
import com.alibaba.druid.spring.boot.autoconfigure.stat.DruidWebStatFilterConfiguration;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
/**
 * @author lihengming [89921218@qq.com]
 */
@Configuration
@ConditionalOnClass(DruidDataSource.class)
@AutoConfigureBefore(DataSourceAutoConfiguration.class)
@EnableConfigurationProperties({DruidStatProperties.class, DataSourceProperties.class})
@Import({DruidSpringAopConfiguration.class,
    DruidStatViewServletConfiguration.class,
    DruidWebStatFilterConfiguration.class,
    DruidFilterConfiguration.class})
public class DruidDataSourceAutoConfigure 
注解说明:
1、 @ConditionalOnClass(DruidDataSource.class)
当系统中存在DruidDataSource类的时候才会进行初始化配置,当引入druid的时候已经存在这个类,所以这个类自动配置
2、@AutoConfigureBefore(DataSourceAutoConfiguration.class)
在初始化化当前类之前加载DataSourceAutoConfiguration,在springboot官方的数据源加载之前加载
@Bean(initMethod = "init")
@ConditionalOnMissingBean // 容器中不存在当前bean的时候加载
public DataSource dataSource() {
    LOGGER.info("Init DruidDataSource");
    return new DruidDataSourceWrapper();
}
由于在官方之前加载数据源,所以spring容器中不存在DataSource数据源,然后加载druid的DataSource,以这个为主
3、 @EnableConfigurationProperties({DruidStatProperties.class, DataSourceProperties.class})
DruidStatProperties和DataSourceProperties 加入到容器中
4、 @Import({DruidSpringAopConfiguration.class,DruidStatViewServletConfiguration.class,DruidWebStatFilterConfiguration.class,DruidFilterConfiguration.class})
将druid监控页面用的其他配置加载进来
4.1: DruidSpringAopConfiguration是用来配置页面spring监控的
所有属性配置根是:
spring.datasource.druid.aop-patterns
4.2: DruidStatViewServletConfiguration
主要是配置druid的监控页面:默认是开启的,配置用户名密码访问就是这个类
4.3: DruidWebStatFilterConfiguration,默认是开启的
web监控配置:路径拦截和派出拦截:如默认排除"*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
4.4: DruidFilterConfiguration 其他配置的拦截
,如:防火墙、日志等,配置项如下图

由于数据源的配置使用的是DataSourceProperties,所以数据源配置是以spring.datasource开头的配置项

DruidDataSourceWrapper 包装器类,这个类将Spring的DataSource的数据处理到DruidDataSource中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/344758.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是销售管理?销售管理的五大职能

销售管理听起来很简单&#xff0c;似乎只是负责销售并确保客户满意&#xff0c;但事实上&#xff0c;它远不止于此。 销售管理的实际职能包括监督销售团队的工作&#xff0c;制定计划和设定目标&#xff0c;通常还包括确保销售流程的效率以获得最佳业务结果。 什么是销售管理…

千兆网口down/up偶发link成百兆问题

a. 软硬件环境&#xff1a;​NXP LS1043A IGB211&#xff08;pcie接口千兆网卡&#xff09;:linux 4.9.19 igb driver Nvidia Xavier NX RTL8211F: linux4.9​ ​NXP LS1043A -----(pcie)--- IGB211 <---(PCB走线代替网线)-----> RTL8211F&#xff08;phy&#xff09;…

剑指 Offer 56 - II. 数组中数字出现的次数 II

题目 在一个数组 nums 中除一个数字只出现一次之外&#xff0c;其他数字都出现了三次。请找出那个只出现一次的数字。 思路 这题是剑指 Offer 56 - I. 数组中数字出现的次数的变体&#xff0c;本题只有一个数num出现一次&#xff0c;其余的均出现三次 三次的话使用异或消无法…

云计算与 SaaS 有何区别?

云计算与 SaaS 有何区别&#xff1f;众所周知&#xff0c;SaaS是云计算的三种服务模式其中之一。 三种分别是&#xff1a; Iaas&#xff1a;基础设施即服务Paas&#xff1a;平台即服务SaaS&#xff1a;软件即服务 对于三者的区别&#xff0c;一起来吃顿烤肉&#xff0c;听我慢…

13_FreeRTOS消息队列

目录 队列简介 FreeRTOS队列特点 队列操作基本过程 队列结构体介绍 队列结构体整体示意图 队列相关API函数介绍 创建队列相关API函数介绍 往队列写入消息API函数 往队列写入消息函数入口参数解析 从队列读取消息API函数 实验源码 队列简介 队列是任务到任务、任务…

开发微服务电商项目演示(五)

登录方式调整第1步&#xff1a;从zmall-common的pom.xml中移除spring-session-data-redis依赖注意&#xff1a;本章节中不采用spring-session方式&#xff0c;改用redis直接存储用户登录信息&#xff0c;主要是为了方便之后的jmeter压测&#xff1b;2&#xff09;这里只注释调用…

如何使用ArcGIS转换坐标

1.概述大家都知道ArcGIS提供了坐标转换功能&#xff0c;在我们手里的数据坐标系千差万别&#xff0c;经常会遇到转换坐标的时候&#xff0c;那么是否可以用ArcGIS进行转换&#xff1f;答案是肯定的&#xff0c;但是转换的过程比较复杂&#xff0c;这里为大家介绍一下转换的方法…

微软 new Bing 通过 ChatGPT 加持后搜索体验暴增,国内该如何申请使用那?

就在近期微软公布了自家的 Bing 将加持 ChatGPT 推出新版&#xff0c;消息一出 Bing 的下载量直接翻了 10 倍以上&#xff0c;48小时内就已经有 100 万名新用户申请加入了 还可以申请试用 new bing 吗&#xff1f; 目前用户还无法直接访问新版 bing &#xff0c;还是要前往申…

从一次有趣的漏洞分析到一个有趣的PHP后门

起因 事情的起因很有趣&#xff0c;前几天我正对着电脑发呆的时候&#xff0c;突然有个安全交流群的群友来找我交流一个问题 大概的意思就是&#xff0c;他在挖SRC的时候&#xff0c;发现一处资产存在目录遍历漏洞&#xff0c;它通过这个漏洞&#xff0c;找到目标资产使用了一…

基于图像的相机定位:概述

虚拟现实、增强现实、机器人和自动驾驶最近引起了学术界和工业界的广泛关注&#xff0c;其中基于图像的相机定位是一项关键任务。然而&#xff0c;还没有关于基于图像的相机定位的完整评论。迫切需要映射这个主题&#xff0c;使个人能够快速进入该领域。在本文中&#xff0c;概…

【Airplay_BCT】Bonjour conformance tests苹果IOT

从Airplay开始&#xff0c;接触到BCT&#xff0c;这是什么&#xff1f;被迫从安卓变成ios用户和开发。。。开始我的学习之旅&#xff0c;记录成长过程&#xff0c;不定时更新 Bonjour 下面是苹果官网关于bonjour的解释 Bonjour, also known as zero-configuration networking, …

pinia实战 购物车(自定义插件实现pinia持久化)

目录 一、实例 二、需求 三. 代码解析 shop.vue shop.ts 四、持久化插件 插件介绍 持久化实现思路 一、实例 二、需求 单选全选功能&#xff0c;并且可以互相联动 小计功能 总计功能 商品加减&#xff0c;数量为零时不能在减 三. 代码解析 shop.vue 1.获取shop模块实…

AttributeError: module ‘lib‘ has no attribute ‘OpenSSL_add_all_algorithms

pip安装crackmapexec后,运行crackmapexec 遇到报错 AttributeError: module lib has no attribute OpenSSL_add_all_algorithms 直接安装 pip3 install crackmapexec 解决 通过 python3 -m pip install --upgrade openssl 或者 python3 -m pip install openssl>22.1.…

YOLOv5/v7 Flask Web 车牌识别 | YOLOv7 + EasyOCR 实现车牌识别

YOLOv7 Flask Web 车牌识别图片效果展示 本篇博文只包含源码以及使用方式,目前不同提供详细开发教程。 YOLOv7 Flask Web 车牌识别视频效果展示 YOLOv7 + EasyOCR 实现车牌识别 什么是Flask? 简介 Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更…

【Opencv实战】几十年前的Vlog火了:黑白老照片如何上色?这黑科技操作一定要知道,复原度超高,竟美的出奇~(图像修复神级代码)

导语 哈喽大家好呀&#xff01;我是每天疯狂赶代码的木木子吖&#xff5e;情人节快乐呀&#xff01; 所有文章完整的素材源码都在&#x1f447;&#x1f447; 粉丝白嫖源码福利&#xff0c;请移步至CSDN社区或文末公众hao即可免费。 我们都知道&#xff0c;有很多经典的老照片…

云原生时代顶流消息中间件Apache Pulsar部署实操-上

文章目录安装运行时Java版本推荐Locally Standalone集群启动验证部署分布式集群部署说明初始化集群元数据部署BookKeeper部署BrokerAdmin客户端和验证Tiered Storage(层级存储)概述支持分级存储何时使用工作原理安装 运行时Java版本推荐 Locally Standalone集群 启动 # 下载…

Eureka集群搭建教程

前言&#xff1a; 为了提升注册中心稳定性&#xff0c;防止注册中心宕机后&#xff0c;服务不可用的情况&#xff0c;我们可以通过将Eureka注册中心搭建成集群模式&#xff0c;当一台注册中心微服务宕机后&#xff0c;另一台依然可以支持服务的注册与发现。本文将讲解下如何搭…

在Spring-boot中操作MongoDB

MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据库的。在使用spring-boot操作MongoDB数据…

项目介绍 + 定长内存池设计及实现

你好&#xff0c;我是安然无虞。 文章目录项目介绍当前项目做的是什么?技术栈内存池是什么?池化技术内存池内存池主要解决的问题malloc定长内存池学习目的定长内存池设计项目介绍 当前项目做的是什么? 这个项目是实现一个高并发的内存池, 它的原型是 Google 的一个开源项…

C++——哈希3|位图

目录 常见哈希函数 位图 位图扩展题 位图的应用 常见哈希函数 1. 直接定址法--(常用) 这种方法不存在哈希冲突 取关键字的某个线性函数为散列地址&#xff1a;Hash&#xff08;Key&#xff09; A*Key B 优点&#xff1a;简单、均匀 缺点&#xff1a;需要事先知道关键字的…