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

spring boot(2.4.x之前版本)和spring cloud项目中配置文件的作用

spring 版本以及相关的组件一直在变化,其中一些类或者功能在低版本中有,高版本中去掉了,有的新功能只在高版本有。

为了防止理解问题,pom.xml 版本依赖如下

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.12.RELEASE</version><relativePath/> <!-- lookup parent from repository -->
</parent><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Hoxton.SR12</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.6.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

日常开发中经常使用的配置文件有 application 和 bootstrap(日志相关的例外不做讲解),对应的配置文件后缀分别为  properties 或者 yml(yaml),区别如下

application

属于 spring boot。

简单使用不依赖其他服务,spring boot 的依赖足够。

bootstrap

属于 spring cloud,位于 spring-cloud-context 中。

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-context</artifactId><version>3.0.0</version>
</dependency>

可以看到,在 spring.factories 中声明了 ApplicationListener 的实现类  BootstrapApplicationListener,所以,开源组件如果想要使用 spring cloud 的组件一般都会引入这个。

想要读取对应的配置需要结合 BootstrapApplicationListener 进行读取。

如果未引入 spring-cloud-context 相关依赖,bootstrap 相关配置文件则无法找到。

idea 对应的文件图标颜色发生改变

引入了依赖

未引入依赖

其中,对应的配置加载都通过 ConfigFileApplicationListener 来处理。

github 上源码如下

https://github.com/spring-projects/spring-boot/blob/v2.3.12.RELEASE/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/config/package-info.java

https://github.com/spring-projects/spring-boot/blob/v2.3.12.RELEASE/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/config/ConfigFileApplicationListener.java

可以发现,ConfigFileApplicationListener 位于 spring boot 中。

从 spring cloud 2020.0.x 版本开始,针对  bootstrap 的处理发生改变,由于 spring cloud 2020.0.x 对应的 spring boot 版本为 2.4.x,所以需要做对应的升级处理。

相关文章:

  • 【证书管理】实验报告
  • 数据结构第十五天(树的存储/孩子表示法)
  • C语言中在main函数之后运行的函数
  • Acwing 5468. 最有价值字符串【挖掘性质+分类讨论】
  • CVE-2018-19518 漏洞复现
  • 搜索二维矩阵[中等]
  • 【Linux】Linux下的基本指令
  • Android AOSP源码研究之万事开头难----经验教训记录
  • C++学习Day03之new和delete使用
  • 如何实现视线(目光)的检测与实时跟踪
  • JavaGuide
  • Huggingface上传模型
  • C# CAD交互界面-自定义面板集-添加快捷命令(五)
  • three.js 箭头ArrowHelper的实践应用
  • Peter算法小课堂—单调队列
  • [LeetCode] Wiggle Sort
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • KMP算法及优化
  • Python 反序列化安全问题(二)
  • python大佬养成计划----difflib模块
  • sessionStorage和localStorage
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 分享几个不错的工具
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 如何在GitHub上创建个人博客
  • 一道闭包题引发的思考
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • Java性能优化之JVM GC(垃圾回收机制)
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • 浅谈sql中的in与not in,exists与not exists的区别
  • 移动端高清、多屏适配方案
  • $(function(){})与(function($){....})(jQuery)的区别
  • (附源码)ssm码农论坛 毕业设计 231126
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .Net IOC框架入门之一 Unity
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • .sh
  • @hook扩展分析
  • @开发者,一文搞懂什么是 C# 计时器!
  • [ C++ ] STL---stack与queue
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • [20150707]外部表与rowid.txt
  • [20170705]diff比较执行结果的内容.txt
  • [C#]OpenCvSharp使用帧差法或者三帧差法检测移动物体
  • [codevs 2822] 爱在心中 【tarjan 算法】
  • [Docker]六.Docker自动部署nodejs以及golang项目
  • [dts]Device Tree机制
  • [elastic 8.x]java客户端连接elasticsearch与操作索引与文档
  • [GN] Vue3.2 快速上手 ---- 核心语法2
  • [HITCON 2017]SSRFme perl语言的 GET open file 造成rce
  • [jobdu]不用加减乘除做加法
  • [LeetCode] 93. Restore IP Addresses 复原IP地址
  • [NOSQL] Redis介绍