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

关于 spring boot - application.yml 加载顺序

在Spring Boot中,application.yml(或application.properties)配置文件的加载顺序是由Spring Boot的Environment抽象和ConfigFileApplicationListener类共同管理的。这个加载过程涉及多个步骤,包括从多个位置搜索配置文件、合并配置属性以及应用优先级规则。

1、application.yml都可以放置在哪些位置

1.1 项目根目录下的config文件夹中:/config/application.yml

1.2 项目根目录下:/application.yml

1.3 类路径(classpath)下的config文件夹中:classpath:/config/application.yml

1.4 类路径(classpath)下:classpath:/application.yml

2、加载顺序和优先级

2.1 项目根目录下的config文件夹中的application.yml(/config/application.yml-最高优先级)。

2.2 项目根目录下的 /application.yml。(优先级次之)

2.3 类路径(classpath)下的config文件夹中application.yml。

2.4 类路径(classpath)下的 /application.yml(最低优先级)。

根据加载顺序和优先级,项目根目录下的config文件夹中application.yml会被优先加载。如果在这个位置存在配置文件,Spring Boot会首先加载它,并且如果其中有与其他位置的配置文件相同的配置项,它会覆盖其他位置的配置。

3、相关代码解析

3.1 ConfigFileApplicationListeneronApplicationEvent方法

--- 这个方法会在Spring Boot的ApplicationEnvironmentPreparedEvent事件触发时被调用。它负责初始化配置文件加载过程。

3.2 配置文件位置搜索:

--- ConfigFileApplicationListener会调用ConfigFileLocationResolver来解析配置文件的位置。ConfigFileLocationResolver会根据前面提到的搜索位置规则来生成可能的配置文件路径列表。

3.3 配置文件加载

--- 一旦确定了配置文件的位置,ConfigFileApplicationListener会使用PropertySourceLoader来加载这些文件。对于YAML文件,会使用YamlPropertySourceLoader

3.4 属性合并

--- 加载的配置文件会被转换成PropertySource对象,并添加到Spring的Environment中。Spring的Environment是一个抽象,它允许你访问应用程序的属性,包括系统属性、环境变量、命令行参数以及配置文件中的属性。

3.5 优先级应用

--- 在添加PropertySourceEnvironment时,后添加的PropertySource会覆盖先前添加的同名属性。因此,根据加载顺序,优先级高的配置文件中的属性会覆盖优先级低的配置文件中的同名属性。

4、注意事项

3.1 如果在同一个目录下同时存在application.ymlapplication.properties文件,Spring Boot会默认先读取application.properties文件。但是,建议在同一项目中尽量统一使用一种配置文件格式(ymlproperties),以避免潜在的配置冲突和混淆。

3.2 可以通过命令行参数--spring.config.location来指定额外的配置文件位置,这些指定的配置文件具有最高的优先级。但是,使用这种方式指定的配置文件不会与默认位置的配置文件形成互补配置;如果需要互补配置,可以使用--spring.config.additional-location参数。

3.3 在Spring Boot 2.0及以上版本中,使用spring.config.location参数时,Spring Boot只会加载指定的配置文件,而不会加载默认位置的配置文件。因此,在使用该参数时需要谨慎。


http://www.kler.cn/a/389403.html

相关文章:

  • 【MySQL】MySQL函数之JSON_EXTRACT
  • 利用阿里云下载 WebRTC 源码
  • 使用jmeter查询项目数据库信息,保存至本地txt或excel文件1108
  • 机器学习——贝叶斯
  • STM32嵌入式闹钟系统设计与实现
  • 网页web无插件播放器EasyPlayer.js点播播放器遇到视频地址播放不了的现象及措施
  • LabVIEW实验室液压制动系统
  • L2 级智能驾驶车辆随时间变化的HMI系统提示效果研究
  • AI 写作(六):核心技术与多元应用(6/10)
  • 【科研积累】大模型的认知笔记
  • 【Python爬虫实战】全面解析 DrissionPage:简化 Python 浏览器自动化的三种模式
  • 使用亚马逊 S3 连接器为 PyTorch 和 MinIO 创建地图式数据集
  • MySQL之索引(3)(索引基本语法、SQL执行计划、常见索引失效原因与解决方法)
  • 使用Hutoo库HttpRequest工具类调用MultipartFile参数接口
  • 『Django』初识DRF
  • python语言基础-4 常用模块-4.5 hashlib模块与base64模块
  • 一台手机如何录制播客——程序员也可玩转播客
  • vue openlayers一些图层操作(获取指定名字的图层等)
  • 无线局域网四种类型
  • 基于JSP网上书城的设计与实现
  • QJson-趟过的各种坑(先坑后用法)
  • 前端简明教程--初体验
  • 使用vscode 连接linux进行开发
  • 2款使用.NET开发的数据库系统
  • React 探秘(四):手撸 mini-react
  • lua入门教程:type函数