application.yml与bootstrap.yml的区别

Spring Boot 默认支持 properties(.properties) 和 YAML(.yml .yaml ) 两种格式的配置文件,yml 和 properties 文件都属于配置文件,功能一样。

Spring Cloud 构建于 Spring Boot 之上,在 Spring Boot 中有两种上下文,一种是 bootstrap,另外一种是 application,下面列举这两种配置文件的区别

加载顺序

若application.yml 和bootstrap.yml 在同一目录下:bootstrap.yml 先加载 application.yml后加载

bootstrap.yml 用于应用程序上下文的引导阶段。bootstrap.yml 由父Spring ApplicationContext加载。

配置区别

bootstrap.yml 和 application.yml 都可以用来配置参数。

bootstrap.yml 用来程序引导时执行,应用于更加早期配置信息读取。可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。一旦bootStrap.yml 被加载,则内容不会被覆盖。

application.yml 可以用来定义应用级别的, 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等。

属性覆盖问题

启动上下文时,Spring Cloud 会创建一个 Bootstrap Context,作为 Spring 应用的 Application Context 的父上下文。

初始化的时候,Bootstrap Context 负责从外部源加载配置属性并解析配置。这两个上下文共享一个从外部获取的 Environment。Bootstrap 属性有高优先级,默认情况下,它们不会被本地配置覆盖

也就是说如果加载的 application.yml 的内容标签与 bootstrap 的标签一致,application 也不会覆盖 bootstrap,而 application.yml 里面的内容可以动态替换。

bootstrap.yml典型的应用场景

  • 当使用 Spring Cloud Config Server 配置中心时,这时需要在 bootstrap.yml 配置文件中指定 spring.application.name 和 spring.cloud.config.server.git.uri,添加连接到配置中心的配置属性来加载外部配置中心的配置信息
  • 一些固定的不能被覆盖的属性
  • 一些加密/解密的场景
### 如何配置使用 Spring Boot `bootstrap.yml` 文件 #### 特殊用途重要性 在 Spring Cloud 应用程序中,`bootstrap.yml` 文件主要用于支持应用的早期初始化过程中的配置加载机制[^1]。此文件允许开发者定义那些需要早于常规应用程序上下文启动前就可用的设置。 #### 主要功能差异对比 相较于 `application.yml`,`bootstrap.yml` 是由父 `ApplicationContext` 加载并优先处理,在应用程序上下文引导阶段即已生效,并且其中定义的属性不可被覆盖。而 `application.yml` 则是在标准的应用上下文中使用的自动化配置文件[^3]。 #### 基本结构常见配置项 下面是一个典型的 `bootstrap.yml` 文件的基本框架: ```yaml spring: application: name: my-service-name # 定义服务名称 cloud: config: uri: http://config-server-url # 指向配置服务器URL fail-fast: true # 如果无法连接到Config Server则快速失败 ``` 对于 Eureka 注册中心的相关配置可以这样写入 `bootstrap.yml`: ```yaml eureka: instance: instance-id: ${spring.cloud.client.ipAddress}:${server.port} client: serviceUrl: defaultZone: http://springcloudserver-first:9090/eureka/,http://springcloudserver-two:9091/eureka/ ``` 需要注意的是,当遇到类似 “Failed to load property source from location 'classpath:/...'” 这样的错误时,应该仔细检查配置文件的内容是否正确无误[^4]。 #### 实际应用场景举例 假设有一个微服务架构下的项目想要通过 Config Server 来集中管理各个模块的服务端口、数据库链接字符串等敏感信息,则可以在各子项目的 `bootstrap.yml` 中指定 Config Server 的地址以及当前服务的名字,从而实现动态获取这些参数的目的。
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值