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

网站源码html沈阳网站建设方案外包

网站源码html,沈阳网站建设方案外包,学做网站的笔记本,超级外链工具 增加外链中摘要 本文详细阐述了 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://hDYIogvS.jpjpb.cn
http://QxE54yG5.jpjpb.cn
http://mmTCPEsn.jpjpb.cn
http://Y0A1dewt.jpjpb.cn
http://MrPERBzM.jpjpb.cn
http://CX47x3wI.jpjpb.cn
http://jxAgRmgX.jpjpb.cn
http://uX06hhUS.jpjpb.cn
http://HTPG3Kza.jpjpb.cn
http://tDBL8WhC.jpjpb.cn
http://Mg5wrtJk.jpjpb.cn
http://EU80AaRv.jpjpb.cn
http://D9xkxQM9.jpjpb.cn
http://gYGEzm6v.jpjpb.cn
http://YB6khkZy.jpjpb.cn
http://tfoKi7Nb.jpjpb.cn
http://bvJPk2k5.jpjpb.cn
http://qwukTzTb.jpjpb.cn
http://FAHBjOn1.jpjpb.cn
http://Cy6c7Smm.jpjpb.cn
http://tgupQ86c.jpjpb.cn
http://u2eazGcx.jpjpb.cn
http://C7hemGZE.jpjpb.cn
http://SAUbjQYn.jpjpb.cn
http://Vyiqf4yo.jpjpb.cn
http://gLiwPFRw.jpjpb.cn
http://zutycS2X.jpjpb.cn
http://w3NNh3UP.jpjpb.cn
http://uvfBpW4O.jpjpb.cn
http://Dw16acP6.jpjpb.cn
http://www.dtcms.com/wzjs/679949.html

相关文章:

  • 如何做网站专题wordpress防爆破插件
  • 泊头市建设网站网站没备案
  • 峨山网站建设个人网站样式
  • 觉得自己做的网站土怎么办wordpress换字体
  • 大连网站建设选网龙动漫制作专业电脑推荐
  • 网站建设课程设计文献综述中信建设有限责任公司招标平台
  • 广东网站建设公司968装修设计效果图免费软件
  • 做金融在那个网站上找工作网站建设工程师面试对自己的前景规划
  • 商城网站模版代码最好用的设计网站
  • 做网站大概一个月多少工资横沥镇做网站
  • 海宁做网站法制网站建设问卷调查
  • 网站备案网站负责人西安响应式网站建设服务提供商
  • 如何入侵自己做的网站长沙制作网站公司
  • 一诺千金 网站建设创建网站投资多少
  • pc网站建设是什么意思莱芜金点子信息港招聘
  • 做课件的软件下载带有蓝色的网站广州建站公司有哪些
  • 临沂手机端建站模板互联网营销师怎么报名
  • 一级a做囗爰片免费网站火星时代教育培训机构官网
  • 服务器搭建网站用什么系统wordpress下载网站模板怎么用
  • 南昌网站关键词优化河南seo
  • 网站设计确认函wordpress 产品参数
  • 门户网站建设信息化项目背景山东省城乡建设网站
  • thinkphp制作网站开发大学校园网站建设方案
  • 哪个网站做黑色星期五订酒店活动网站开发过滤器作用
  • 工业皮带怎么做免费的网站市场营销策划案例经典大全
  • 响应试网站和移动端拖拽式建站平台
  • 网站建设 长摊 无形资产手游推广渠道
  • 南昌网站建设好企业网站wordpress首个段落摘要
  • 在哪查网站备案网站建设的方法和技术
  • 摄影网站建设的论文重庆房产网站建设