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

Spring Boot 全局配置文件优先级

好的,Spring Boot的全局配置文件优先级是一个非常重要的概念,它决定了在不同位置的同名配置属性以哪个为准。


Spring Boot 全局配置文件优先级核心知识点 📌

  • 文件格式优先级: 在同一目录下,如果同时存在 application.propertiesapplication.yml 文件,.properties 文件的优先级高于 .yml 文件。这意味着,如果两个文件中定义了相同的属性,将以 .properties 文件中的值为准。

  • 文件位置加载顺序 (由高到低): Spring Boot会从多个位置加载 application.propertiesapplication.yml 文件,优先级顺序如下(列表顶部的优先级最高):

    1. 命令行指定的 spring.config.location: 可以在启动应用时通过命令行参数直接指定配置文件的位置,这个位置的优先级最高。
    2. 项目根目录下的 /config 子目录: 例如,如果你的 JAR 包在 /app/my-app.jar,那么 /app/config/application.properties 的优先级很高。
    3. 项目根目录: JAR 包所在的目录。例如,/app/application.properties
    4. 类路径下的 /config: 项目 src/main/resources/config/ 目录下的配置文件。
    5. 类路径根目录: 项目 src/main/resources/ 目录下的配置文件。这是项目中最常用的位置。
  • Profile特定配置文件的优先级:

    • 无论是哪种位置,特定profile的配置文件 (application-{profile}.properties) 的优先级总是高于不带profile的默认配置文件 (application.properties)。
    • 例如,如果同时激活了 dev profile,并且在 src/main/resources/ 目录下同时存在 application.propertiesapplication-dev.properties,那么 application-dev.properties 中的属性会覆盖 application.properties 中的同名属性。
  • 外部配置的整体优先级 (更广范围): 配置文件只是Spring Boot外部化配置优先级中的一部分。完整的优先级顺序(部分,从高到低)大致如下:

    1. 命令行参数: java -jar my-app.jar --server.port=9090
    2. ServletConfig / ServletContext 初始化参数
    3. JNDI 属性
    4. Java 系统属性 (System.getProperties())
    5. 操作系统环境变量
    6. Profile特定的应用配置文件 (如 application-{profile}.properties)
    7. 普通的应用配置文件 (如 application.properties)
    8. @PropertySource 注解指定的配置文件
    9. 默认属性 (通过 SpringApplication.setDefaultProperties 设置)

核心要点总结:

  • .properties 优先于 .yml (在同一级别)。
  • 外部配置优先于内部配置 (JAR包外部的配置文件优先于内部的)。
  • Profile特定配置优先于通用配置
  • 命令行参数和环境变量可以覆盖所有配置文件中的属性,这使得在不同环境中部署应用变得非常灵活。
http://www.xdnf.cn/news/10381.html

相关文章:

  • 基于springboot的宠物领养系统
  • 本振相参解析(1)2025.6.1
  • 【华为云Astro】从OBS CSV文件获取配置指南
  • 语音数据处理:ueng 与 ong 的统一表示方案
  • Python数据类型详解:从字符串到布尔值,一网打尽
  • Vue-2-前端框架Vue基础入门之二
  • 从单机到集群,再到分布式,再到微服务
  • 【计算机系统结构】习题2
  • 雪花算法:分布式ID生成的优雅解决方案
  • 【2025.06】jupyter notebook 7+ 新手安装、配置、扩展应用(windows篇)
  • 【配置指南】Dify部署超全配置参考手册
  • 类和对象(4)
  • 税法 -2.2- 增值税-允许抵扣的进项税额
  • 零基础安装 Python 教程:从下载到环境配置一步到位(支持 VSCode 和 PyCharm)与常用操作系统操作指南
  • X-MACRO使用技巧
  • linux命令 systemctl 和 supervisord 区别及用法解读
  • 【计算机网络】Linux下简单的UDP服务器(超详细)
  • 鸿蒙OSUniApp PWA开发实践:打造跨平台渐进式应用#三方框架 #Uniapp
  • Android第十二次面试-多线程和字符串算法总结
  • Mac电脑上本地安装 redis并配置开启自启完整流程
  • uni-app学习笔记十九--pages.json全局样式globalStyle设置
  • Langchaine4j 流式输出 (6)
  • NodeJS全栈开发面试题讲解——P2Express / Nest 后端开发
  • B站视频下载器 v1.0.4|免登录下载1080P视频
  • Global Security Markets 第5章知识点总结
  • 字节面试手撕题:版本号排序
  • ReLU的变体
  • 基于ZYNQ ARM+FPGA异构平台的声呐数据采集系统设计
  • Amazon Augmented AI:人类智慧与AI协作,破解机器学习审核难题
  • 【配置vscode默认终端为git bash】