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

江门加盟网站建设网站建设福永附近网络公司

江门加盟网站建设,网站建设福永附近网络公司,凉州区住房城乡建设局网站,云南省建设工程信息服务平台摘要 本文详细阐述了 Spring Cloud 和 Spring Boot 项目中配置文件的加载顺序。Spring Cloud 项目因引入 bootstrap.yml 和远程配置中心,加载顺序更复杂。其顺序依次为命令行参数、SPRING_APPLICATION_JSON、系统属性、操作系统环境变量、远程配置中心、bootstrap.…

摘要

本文详细阐述了 Spring Cloud 和 Spring Boot 项目中配置文件的加载顺序。Spring Cloud 项目因引入 bootstrap.yml 和远程配置中心,加载顺序更复杂。其顺序依次为命令行参数、SPRING_APPLICATION_JSON、系统属性、操作系统环境变量、远程配置中心、bootstrap.yml、本地 application.yml(按特定顺序)、jar 包内 application.yml、@PropertySource 注解配置文件和默认配置。bootstrap.yml 用于启动阶段配置,application.yml 用于主要业务配置。还探讨了远程配置中心、如何确保本地 application.yml 不被远程覆盖以及相关总结。Spring Boot 项目配置文件加载顺序相对简单,包括默认顺序、@PropertySource 加载外部配置、多文件加载和单元测试时的配置等。

1. SpringCloud项目配置文件加载顺序

Spring Cloud 项目中,配置文件的加载顺序比普通 Spring Boot 项目更复杂,主要是因为 bootstrap.yml远程配置中心 的加入。

1.1. Spring Cloud 配置文件加载顺序

Spring Cloud 的配置加载顺序 从高到低 如下:

  1. 命令行参数(最高优先级)
  2. SPRING_APPLICATION_JSON(环境变量或 -Dspring.application.json
  3. 系统属性System.getProperties()
  4. 操作系统环境变量System.getenv()
  5. 远程 Spring Cloud Config 配置中心(如果启用)
  6. bootstrap.properties / bootstrap.yml(优先级高于 application.yml
  7. 本地 application.properties / application.yml(按以下顺序)
    • file:./config/(外部 config 目录)
    • file:./(项目根目录)
    • classpath:/config/resources/config/ 目录)
    • classpath:/resources/ 目录)
  1. 打包在 jar 内的 application.properties / application.yml
  2. @PropertySource 注解的配置文件
  3. 默认配置(Spring 内置的默认值)

1.2. bootstrap.ymlapplication.yml 的区别

配置文件

加载时机

作用

适用场景

bootstrap.yml

最先加载(比 application.yml

早)

用于 Spring Boot 启动阶段的配置,如远程配置中心加密密钥多环境动态配置

Spring Cloud 项目(使用 Spring Cloud Config

时)

application.yml

bootstrap.yml

之后加载

用于应用的主要业务配置,如数据库、日志、端口、服务名称等

所有 Spring Boot 和 Spring Cloud 项目

1.3. 远程 Spring Cloud Config 配置中心

如果项目启用了 Spring Cloud Config(远程配置中心),那么:

  1. 远程配置会覆盖本地 application.ymlapplication.properties
  2. 如果远程配置中心启用了 native 模式(本地文件存储),它的优先级相当于 bootstrap.yml,但仍然会覆盖 application.yml
  3. 本地 application.yml 仍然有效,但优先级低于远程配置,除非使用 spring.cloud.config.override-none=true 来禁用远程配置覆盖。

1.4. 如何确保本地 application.yml 不被远程覆盖?

如果不想让远程配置覆盖本地配置:

spring:cloud:config:override-none: true  # 让本地配置优先,不被远程覆盖

如果需要让本地配置部分覆盖远程配置:

spring:cloud:config:allow-override: true   # 允许本地覆盖远程配置override-system-properties: false  # 避免系统属性被覆盖
  • bootstrap.yml 优先级高于 application.yml,用于读取远程配置、加密密钥、动态环境变量等。
  • 远程配置中心的配置 优先级比 本地 application.yml 更高,可以通过 spring.cloud.config.override-none=true 调整。
  • application.propertiesapplication.yml 先加载,如果两者有相同的 key,application.properties 的值会覆盖 application.yml 的值。
  • 外部 config/ 目录下的配置文件优先级比 classpath:/ 下的高,这样可以在不修改 jar 的情况下更新配置。

1.5. SpringCloud项目总结

  • bootstrap.yml 优先级高于 application.yml,用于读取远程配置、加密密钥、动态环境变量等。
  • 远程配置中心的配置 优先级比 本地 application.yml 更高,可以通过 spring.cloud.config.override-none=true 调整。
  • application.propertiesapplication.yml 先加载,如果两者有相同的 key,application.properties 的值会覆盖 application.yml 的值。
  • 外部 config/ 目录下的配置文件优先级比 classpath:/ 下的高,这样可以在不修改 jar 的情况下更新配置。

1.6. spring cloud 项目中bootstrap.yml 没有 会去加载application.yml

Spring Cloud 项目中,如果 没有 bootstrap.yml,Spring 仍然会按照 普通 Spring Boot 项目的加载顺序 来加载 application.yml,但会缺少 bootstrap.yml 处理的特殊功能

1.6.1. bootstrap.yml 的作用

bootstrap.yml 主要用于 Spring Cloud 相关的初始化配置,它比 application.yml 先加载,通常用于:

  1. Spring Cloud Config 远程配置中心的连接信息
  2. 动态环境配置(如 spring.profiles.active
  3. 加密/解密(如 spring.cloud.config.server.encrypt.enabled=true
  4. 自定义 PropertySource(如 Nacos、Apollo)

如果 bootstrap.yml缺失,但应用依赖了远程配置中心(如 Spring Cloud Config Server),那么:

  • 远程配置将不会被加载
  • 应用可能无法正确启动

1.6.2. 没有 bootstrap.yml,Spring Cloud 会如何加载配置?

如果 bootstrap.yml不存在,Spring Boot 仍然会加载 application.yml,但不会提前初始化 Spring Cloud 组件,导致:

  1. 远程配置中心(Spring Cloud Config Server)不会生效
  2. Spring Cloud 相关配置(如 spring.cloud.*)不会在应用启动前被解析
  3. application.yml 仍然会按照正常的 Spring Boot 加载顺序生效

1.6.3. application.yml 是否可以代替 bootstrap.yml

可以,但有一定限制:

  • 你可以把 bootstrap.yml 里的配置放到 application.yml,但它会比远程配置中心的配置优先级低,导致某些 Spring Cloud 组件可能无法正常初始化。
  • 解决方案
    • 如果不用远程配置中心:可以直接把 bootstrap.yml 的内容合并到 application.yml,一般不会有问题。
    • 如果需要远程配置,但不想用 bootstrap.yml,可以用 spring.config.import 手动指定:
spring:config:import: "optional:configserver:http://config-server:8888"

这样即使没有 bootstrap.yml,Spring Boot 仍然可以加载远程配置。

1.6.4. 推荐的做法

场景

是否需要 bootstrap.yml

解决方案

普通 Spring Boot 项目

❌ 不需要

直接使用 application.yml

使用 Spring Cloud Config 远程配置

✅ 需要

spring.cloud.config.uri

bootstrap.yml

使用 Nacos/Apollo 作为配置中心

✅ 需要

bootstrap.yml

配置 spring.cloud.nacos.config.server-addr

不想使用 bootstrap.yml

,但需要远程配置

⚠️ 可选

application.yml

里用 spring.config.import

1.6.5. spring cloud 项目中bootstrap.yml、application.yml总结

  • 如果没有 bootstrap.yml,Spring Cloud 仍然会加载 application.yml,但不会预加载远程配置中心的配置
  • bootstrap.yml 主要用于 Spring Cloud 组件的初始化,特别是远程配置相关功能。如果你的项目不依赖远程配置,可以直接用 application.yml
  • 可以用 spring.config.import 代替 bootstrap.yml,但部分 Spring Cloud 组件可能无法正确初始化。

2. Spring Boot项目配置文件加载顺序

2.1. Spring Boot 默认的加载顺序

Spring Boot 会按照以下顺序加载配置(从高优先级到低优先级):

  1. 命令行参数(最高优先级)
  2. SPRING_APPLICATION_JSON(环境变量或系统属性中的 JSON 配置)
  3. 系统属性System.getProperties()
  4. 操作系统环境变量System.getenv()
  5. RandomValuePropertySource(用于生成随机值)
  6. 外部配置文件(如 application.propertiesapplication.yml):
    • config/ 目录下的文件(如 config/application.yml
    • 项目根目录下的文件(如 application.yml
    • classpath:/config/ 目录下的文件
    • classpath:/ 目录下的文件
  1. 打包在 jar 内的 application.propertiesapplication.yml(最低优先级)

2.2. @PropertySource 加载的外部配置

  • 在 Java 配置类中使用 @PropertySource 可以加载指定路径的 properties 文件,例如:
@Configuration
@PropertySource("classpath:custom.properties")
public class AppConfig {
}
  • @PropertySource 加载的配置优先级比 application.properties 低,但比默认 application.properties 位置的文件优先级高。

2.3. @PropertySources 多文件加载

  • 如果有多个 @PropertySource,后加载的会覆盖先加载的值:
@PropertySources({@PropertySource("classpath:config1.properties"),@PropertySource("classpath:config2.properties")
})
    • config2.properties 中的配置会覆盖 config1.properties 中相同的 key。

2.4. @TestPropertySource(单元测试时的配置)

  • 在 Spring Boot 测试时,@TestPropertySource 指定的文件和属性会覆盖默认 application.properties 的值:
@SpringBootTest
@TestPropertySource(locations = "classpath:test.properties")
public class MyTest {
}

博文参考


文章转载自:

http://DCpAmErQ.fnssm.cn
http://7YSQKrJ6.fnssm.cn
http://7Yxhjasz.fnssm.cn
http://e6tndah3.fnssm.cn
http://zblqcTkN.fnssm.cn
http://z7y11ajf.fnssm.cn
http://yVOuU4yc.fnssm.cn
http://aGTU9nc7.fnssm.cn
http://cYvkU7sR.fnssm.cn
http://9Eju30db.fnssm.cn
http://LzRxn0Lm.fnssm.cn
http://kflWI5hk.fnssm.cn
http://FpHWYcxg.fnssm.cn
http://GEQkn9eG.fnssm.cn
http://lWYocx8x.fnssm.cn
http://WXB4EjqF.fnssm.cn
http://nJrf8CdS.fnssm.cn
http://fmsNXrZC.fnssm.cn
http://kiwrYlrT.fnssm.cn
http://wPQhArv6.fnssm.cn
http://ymgtRhl3.fnssm.cn
http://eYpS6GH3.fnssm.cn
http://84xMCEyO.fnssm.cn
http://ctLJWc7r.fnssm.cn
http://ncq9AADZ.fnssm.cn
http://wBRB0mef.fnssm.cn
http://Os85aE6b.fnssm.cn
http://HQphlGDB.fnssm.cn
http://v3VwgjOs.fnssm.cn
http://2qR1qHKI.fnssm.cn
http://www.dtcms.com/wzjs/655385.html

相关文章:

  • 36氪国外做网站多举措加强局门户网站建设
  • wordpress建站比较seo网络排名优化哪家好
  • 网站转化路径新能源网站开发
  • 北湖建设局网站好123上网从这里开始
  • 西宁网站建设排名宝山湖网站建设
  • 织梦门户网站做大后企业展示网站案例
  • 网站维护优化wordpress 有赞云
  • 手机网站做落地页文本文档做网站
  • 多少钱百度seo培训要多少钱
  • 泉州网站关键词排名wordpress外链跳转样式
  • 企业建站工具有趣的wordpress插件
  • wordpress 视频列表杭州seo托管公司推荐
  • 怎样建设网站啊网站网站开发设计
  • 网站左侧悬浮wordpress访问后台
  • 网络推广免费网站菜单设计制作
  • 网站建设后台有哪些项目网站开发和手机开发哪个好
  • 网站开发在线学习seo服务 收费
  • 网站模板如何使用为什么我有的网站打不开
  • 基层组织建设部网站凤岗本地网站
  • c 如何做网站畔游网站建设
  • 军博网站建设js 做网站
  • 南通网站建设报价wordpress对php版本要求
  • 漂亮的数据型网站软件开发课程
  • 数学老师做直播的网站上海最专业的网站建设公司哪家好
  • 我们的优势的网站头条网站开发
  • 各大网站发布网站建设与应用教案
  • 宜宾网站建设多少钱链接转换器
  • 建设部网站公示公告wordpress灯箱图片
  • 网站建设教学视频如何选择商城网站建设
  • 网站开发所有工具多大个人注册公司需要什么