当前位置: 首页 > news >正文

SpringBoot 依赖管理和自动配置---带你了解什么是版本仲裁

😀前言
本篇博文是关于SpringBoot 依赖管理和自动配置,希望能够帮助到您😊

🏠个人主页:晨犀主页
🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力😉😉
💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰
如果文章有什么需要改进的地方还请大佬不吝赐教 先在此感谢啦😊

文章目录

  • SpringBoot 依赖管理和自动配置😊
    • 依赖管理💕
      • 什么是依赖管理
      • 修改自动仲裁/默认版本号
    • starter 场景启动器💕
      • starter 场景启动器基本介绍
      • 官方提供的starter
        • 介绍
      • 第三方starter
    • 自动配置💕
      • 自动配置基本介绍
      • SpringBoot 自动配置了哪些?
      • 如何修改默认配置
        • 如何修改默认扫描包结构
        • resources\application.properties 配置大全
      • 自动配置遵守按需加载原则💕
        • 基本说明
        • 实例演示
    • 😄总结

SpringBoot 依赖管理和自动配置😊

依赖管理💕

什么是依赖管理

  1. spring-boot-starter-parent 还有父项目, 声明了开发中常用的依赖的版本号

  2. 并且进行自动版本仲裁, 即如果程序员没有指定某个依赖jar 的版本,则以父项目指定的版本为准

image-20230802213548152

image-20230802213613282

修改自动仲裁/默认版本号

  1. 需求说明: 将SpringBoot mysql 驱动修改成5.1.49

image-20230802213707687

  1. 查看spring-boot-dependencies.pom 里面规定当前依赖的版本对应的key , 这里是 mysql.version

image-20230802223700933

  1. 修改quickstart\pom.xml 重写配置, 当更新Maven 时,就依赖到新的 mysql 驱动.

image-20230802223822637

 <!--我们自己指定mysql/驱动版本- 修改版本仲裁--><!-- 1. 方式1:显示的导入mysql依赖, 并明确的指定<version> --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version></dependency><!--	2. 方式2.在自己的pom.xml文件中, 在<properties> 中指定mysql的key如:    <properties><mysql.version>5.1.49</mysql.version></properties>3. 为什么可以达到修改版本仲裁: 根据依赖就近优先原则.-->

版本仲裁就是比如他里面有个父项目,配置了大多数可能需要的jar,默认指定了每一个jar版本。如果本工程配置了就采用本工程的配置,没有就找到父项目的配置。

starter 场景启动器💕

starter 场景启动器基本介绍

  1. 开发中我们引入了相关场景的starter,这个场景中所有的相关依赖都引入进来了,比如我们做web 开发引入了,该starter 将导入与web 开发相关的所有包
 <!--导入web项目场景启动器: 会自动导入和web开发相关的所有依赖[库/jar],非常方便--><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

image-20230802225712633

  1. 依赖树: 可以看到spring-boot-starter-web ,帮我们引入了spring-webmvc,spring-web开发模块,还引入了spring-boot-starter-tomcat 场景,spring-boot-starter-json 场景,这些场景下面又引入了一大堆相关的包,这些依赖项可以快速启动和运行一个项目,提高开发效率.

image-20230802225841062

image-20230802225922351

  1. 所有场景启动器最基本的依赖就是spring-boot-starter , 前面的依赖树分析可以看到,这个依赖也就是SpringBoot 自动配置的核心依赖

image-20230802230029919

官方提供的starter

地址:https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.build-systems.starters

介绍

  1. 在开发中我们经常会用到spring-boot-starter-xxx ,比如spring-boot-starter-web,该场景是用作web 开发,也就是说xxx 是某种开发场景。

  2. 我们只要引入starter,这个场景的所有常规需要的依赖我们都自动引入。

  3. SpringBoot2 支持的所有场景如下:
    https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.build-systems.starters

image-20230802230245503

第三方starter

  1. SpringBoot 也支持第三方starter。
  2. 第三方starter 不要从spring-boot 开始,因为这是官方spring-boot 保留的命名方式的。第三方启动程序通常以项目名称开头。例如,名为thirdpartyproject 的第三方启动程序项目通常被命名为thirdpartyproject-spring-boot-starter。
  3. 也就是说:xxx-spring-boot-starter 是第三方为我们提供的简化开发的场景启动器。

自动配置💕

自动配置基本介绍

  1. 学习SSM 整合时,需要配置Tomcat 、配置SpringMVC、配置如何扫描包、配置字符过滤器、配置视图解析器、文件上传等[如图],非常麻烦。而在SpringBoot 中,存在自动配置机制(就是前面的约定优于配置),提高开发效率

    2.简单回顾以前SSM 整合的配置.

image-20230802230609169

image-20230802230729165

SpringBoot 自动配置了哪些?

  1. 自动配置Tomcat
    image-20230802230756132

  2. 自动配置SpringMVC

image-20230802230815781

  1. 自动配置Web 常用功能: 比如字符过滤器, 提示: 通过获取ioc 容器,查看容器创建的组件来验证,

修改quickstart\src\main\java\com\nlc\springboot\MainApp.java

@SpringBootApplication
public class MainApp {public static void main(String[] args) {//启动springboot应用程序/项目ConfigurableApplicationContext ioc =SpringApplication.run(MainApp.class, args);//如何查看容器中注入的组件String[] beanDefinitionNames = ioc.getBeanDefinitionNames();for (String beanDefinitionName : beanDefinitionNames) {System.out.println("beanDefinitionName--" + beanDefinitionName);}}
}

image-20230805181802793

-------更加直接查看的方式debug-------

image-20230805181857472

  1. 自动配置: 默认扫描包结构!!! ,

官方文档:https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.structuring-your-code.using-the-default-package

image-20230805182019174

如何修改默认配置

如何修改默认扫描包结构

  1. 需求:要求能扫描com.nlc包下的HiController.java 应该如何处理?
  2. 创建: quickstart\src\main\java\com\nlc\HiController.java, 并测试,这时是访问不到的.
@Controller
public class HiController {//返回hi,springboot@RequestMapping("/hi")@ResponseBodypublic String hi() {return "hi~, SpringBoot";}
}
  1. 修改MainApp.java, 增加扫描的包, 并完成测试.
// 直接在SpringBootApplication 注解后指定扫描包名
@SpringBootApplication(scanBasePackages = "com.nlc")
//@SpringBootApplication(scanBasePackages = "com.nlc")指定扫描哪个包及其子包
public class MainApp {//.....
}

resources\application.properties 配置大全

  • SpringBoot 项目最重要也是最核心的配置文件就是application.properties,所有的框架配置都可以在这个配置文件中说明
  • 地址: application.properties配置大全

因为配置代码篇幅过长,影响本篇博文整体阅读,因此单独发表一篇文章方便大家观看,希望能够帮助到您😊SpringBoot 自动配置–常用配置

自动配置遵守按需加载原则💕

基本说明

  1. 自动配置遵守按需加载原则:也就是说,引入了哪个场景starter 就会加载该场景关联的jar 包,没有引入的starter 则不会加载其关联jar

image-20230805205007890

  1. SpringBoot 所有的自动配置功能都在spring-boot-autoconfigure 包里面

image-20230805205644792

  1. 在SpringBoot 的自动配置包, 一般是XxxAutoConfiguration.java, 对应XxxxProperties.java, 如图

image-20230805205711537

实例演示

以MultipartProperties , MultipartAutoConfiguration 和application.properties 来说明,用debug的形式查看

image-20230805205742697

image-20230805205757282

😄总结

  1. 版本仲裁:如果程序员没有指定某个依赖jar 的版本,则以父项目指定的版本为准
  2. 修改pom.xml 配置时, 需要刷新Maven ,否则无法识别
  3. SpringBoot 支持第三方starter。第三方starter命名 不从spring-boot 开始,因为官方starter命名以spring-boot 开头。

😁热门专栏推荐
SpringBoot篇
Spring Boot介绍–快速入门–约定优于配置
SpringBoot 自动配置–常用配置

文章到这里就结束了,如果有什么疑问的地方请指出,诸大佬们一起来评论区一起讨论😁
希望能和诸大佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

相关文章:

SpringBoot 依赖管理和自动配置---带你了解什么是版本仲裁

&#x1f600;前言 本篇博文是关于SpringBoot 依赖管理和自动配置&#xff0c;希望能够帮助到您&#x1f60a; &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您…...

c语言每日一练(2)

前言&#xff1a; 每日一练系列&#xff0c;每一期都包含5道选择题&#xff0c;2道编程题&#xff0c;博主会尽可能详细地进行讲解&#xff0c;令初学者也能听的清晰。每日一练系列会持续更新&#xff0c;暑假时三天之内必有一更&#xff0c;到了开学之后&#xff0c;将看学业情…...

代码随想录第三十七天

代码随想录第三十七天 Leetcode 738. 单调递增的数字 Leetcode 738. 单调递增的数字 题目链接: 单调递增的数字 自己的思路:完全想不到&#xff01;&#xff01; 正确思路:大致思路是从后向前遍历&#xff0c;不可以从前向后&#xff0c;如果从前向后没有保证单调递增的顺序&…...

Linux进程间通信--ftok

在C语言中&#xff0c;ftok函数用于生成一个唯一的键值&#xff0c;该键值通常用于创建共享内存&#xff0c;消息队列和信号量等系统资源的标识符。 ftok函数原型入下&#xff1a; key_t ftok(const char *pathname, int proj_id); 参数说明&#xff1a; pathname&#xff1a…...

Spring Boot集成Mybatis-Plus

Spring Boot集成Mybatis-Plus 1. pom.xml导包 <!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--mysql驱动--><dependency><groupId>mysql<…...

梳理日常开发涉及的负载均衡

负载均衡是当前分布式微服务时代最能提及的词之一&#xff0c;出于对分层、解耦、弱依赖、可配置、可靠性等概念的解读&#xff0c;一对一的模式变得不再可信赖&#xff0c;千变万化的网络环境中&#xff0c;冗余和备份显得格外重要&#xff0c;稍大型的系统就会存在大量微服务…...

IEEE 754 浮点数运算

​​​​​​...

阿里巴巴Java开发手册学习记录

阿里巴巴Java开发手册学习记录 一、编程规约 1.命名风格 严禁使用英文 拼音混合使用 类名应所有单词的首字母大写&#xff0c;除了&#xff08;UserDO&#xff0c;XxxDTO, XxxPo等&#xff09; 常量的命名应该是大写 单词间用下划线连接 抽象类的应以Abstract/Base开头 …...

论文阅读---《Unsupervised T ransformer-Based Anomaly Detection in ECG Signals》

题目&#xff1a;基于Transformer的无监督心电图&#xff08;ECG&#xff09;信号异常检测 摘要 异常检测是数据处理中的一个基本问题&#xff0c;它涉及到医疗感知数据中的不同问题。技术的进步使得收集大规模和高度变异的时间序列数据变得更加容易&#xff0c;然而&#xff…...

收藏这8个好用的原型设计工具,轻松制作原型图

在设计工作中&#xff0c;原型设计是非常关键的一步&#xff0c;而原型设计工具又能帮助设计师更轻松地完成设计工作。今天本文将与大家分享8个好用的原型设计工具&#xff0c;一起来看看吧&#xff01; 1、即时设计 即时设计是一个能在线协作的原型工具&#xff0c;也就是说…...

王道计网 第四章笔记

4.1 生活在网络层的“工人”是路由器,他负责各种异构网络的连接,但是因为他只生活在前三层所以从网络层之上的东西他不能管理,所以网路层之上的数据对于路由器来说必须是相同的、透明的。 常见的网络层协议有IP 和 ICMPTCP IP传输层协议FTP应用层协议一句话区分IP和MAC地址…...

C# Blazor 学习笔记(9):动态css/class绑定

文章目录 前言相关资料css和class绑定直接绑定间接绑定 前言 之前我们说到&#xff0c;我们组件化有三个目的。 不用写CSS不用写html不用写交互逻辑 为了解决第一个目的&#xff0c;我们需要动态css 相关资料 Blazor入手教程&#xff08;二&#xff09;css和class绑定 cs…...

vue3学习-Pinia状态管理

Pinia 定义一个Store import { defineStore } from pinia export const useStore defineStore(main, {})这个 name&#xff0c;也称为 id&#xff0c;是必要的&#xff0c;Pinia 使用它来将 store 连接到 devtools。 将返回的函数命名为 use… 是跨可组合项的约定&#xff0…...

TextBrewer:融合并改进了NLP和CV中的多种知识蒸馏技术、提供便捷快速的知识蒸馏框架、提升模型的推理速度,减少内存占用

TextBrewer:融合并改进了NLP和CV中的多种知识蒸馏技术、提供便捷快速的知识蒸馏框架、提升模型的推理速度&#xff0c;减少内存占用 TextBrewer是一个基于PyTorch的、为实现NLP中的知识蒸馏任务而设计的工具包&#xff0c; 融合并改进了NLP和CV中的多种知识蒸馏技术&#xff0…...

乍得ECTN(BESC)申请流程

根据TCHAD/CHAD乍得法令&#xff0c;自2013年4月1日起&#xff0c;所有运至乍得的货物都必须申请ECTN(BESC)电子货物跟踪单。如果没有申请&#xff0c;将被视为触犯乍得的条例&#xff0c;并在目的地受到严厉惩罚。ECTN是英语ELECTRONIC CARGO TRACKING NOTE的简称&#xff1b;…...

【100天精通python】Day28:文件与IO操作_JSON文件处理

目录 专栏导读 1. JSON数据格式简介 1.1 示例JSON数据 1.2 JSON文件的特点 2 json模块的常用操作 2.1 读写JSON文件的示例 2.2 解析JSON字符串 2.3 修改JSON数据 2.4 查询和操作嵌套数据 2.5 处理包含特殊字符的JSON文件 2.6 处理日期和时间 2.7 处理大型JSON文…...

配置两台数据库为主从数据库模式

一、主库配置 1、修改配置文件 /etc/my3306.cnf #mysql服务ID&#xff0c;保证整个集群环境中唯一&#xff0c;默认为1server-id1#是否只读&#xff0c;1代表只读&#xff0c;0代表读写read-only0#忽略的数据&#xff0c;指不需要同步的数据库#binlog-ignore-dbmysql#指定同步…...

linux允许root远程ssh登录

修改文件/etc/ssh/sshd_config # cat /etc/ssh/sshd_config ... #LoginGraceTime 2m #PermitRootLogin prohibit-password #StrictModes yes #MaxAuthTries 6 #MaxSessions 10 ...将 #PermitRootLogin prohibit-password标注为&#xff1a; PermitRootLogin yes样例&#xf…...

Baumer工业相机堡盟工业相机如何通过BGAPISDK获取相机接口数据吞吐量(C++)

Baumer工业相机堡盟工业相机如何通过BGAPISDK里函数来获取相机当前数据吞吐量&#xff08;C&#xff09; Baumer工业相机Baumer工业相机的数据吞吐量的技术背景CameraExplorer如何查看相机吞吐量信息在BGAPI SDK里通过函数获取相机接口吞吐量 Baumer工业相机通过BGAPI SDK获取数…...

Spring @Scheduled单线程单实例的坑

文章目录 前言背景验证解决方案 前言 在 Java Spring 项目中经常会用 Scheduled 来实现一些定时任务的场景&#xff0c;有必要了解一些它使用时的问题和内部实现机制。本文是偶然间发现的一个问题&#xff0c;刷新了我的认知&#xff0c;分享给大家。 其他相关文章&#xff1…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing

Muffin 论文 现有方法 CRADLE 和 LEMON&#xff0c;依赖模型推理阶段输出进行差分测试&#xff0c;但在训练阶段是不可行的&#xff0c;因为训练阶段直到最后才有固定输出&#xff0c;中间过程是不断变化的。API 库覆盖低&#xff0c;因为各个 API 都是在各种具体场景下使用。…...

全面解析数据库:从基础概念到前沿应用​

在数字化时代&#xff0c;数据已成为企业和社会发展的核心资产&#xff0c;而数据库作为存储、管理和处理数据的关键工具&#xff0c;在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理&#xff0c;到社交网络的用户数据存储&#xff0c;再到金融行业的交易记录处理&a…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7

在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤&#xff1a; 第一步&#xff1a; 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为&#xff1a; // 改为 v…...