将属性配置放在 application.yml 或 bootstrap.yml 上有什么区别?

共 2308字,需浏览 5分钟

 ·

2024-12-05 07:16

你知道的越多,不知道的就越多,业余的像一棵小草!

你关注,我们一起精进!你星标,我们便有了更多故事!

编辑:业余草

推荐:https://t.zsxq.com/VNife

将属性配置放在 application.yml 或 bootstrap.yml 上有什么区别?

这个问题的背景是微信群里一位网友在面试中被问到了,当时他回答的不是很好,今天和群友交流了起来。我刚好看到了,就讲了几句。这里结合国外的一些程序员回答思路,分享给大家。

注意,stackoverflow 上也有和本题一样的一个高赞问题,看起来国外程序员也有搞不懂这个问题的。

首先要了解一点,bootstrap.yml 是优先于 application.yml 加载的。

其次,我们再分两种情况来看。

  • 一种是 SpringBoot 模式下,属性配置在 application.yml 或 bootstrap.yml 中,差别是不大的。
  • 另一种是在 SpringCloud 模式下,使用 Spring Cloud Config Server 时,应在 bootstrap.yml 中指定 spring.application.name 和 spring.cloud.config.server.git.uri、spring.cloud.config.uri。

从技术实现上来讲,bootstrap.yml由 parent Spring 加载 ApplicationContext。该父级 ApplicationContext 在使用之前会加载application.yml

说白了,就是在使用 Spring Cloud 时,“真实”配置数据通常从服务器加载。为了获取 URL(以及其他连接配置,例如密码等),您需要一个早期或“引导”配置。因此,我们需要将配置的服务器属性放在 bootstrap.yml 中,该文件用于加载真实配置数据,通常会覆盖 application.yml 中的内容(如果存在)。

引导文件永远不会被覆盖,因为它具有更高的优先级。

bootstrap.yml 和 bootstrap.properties。仅当我们使用 Spring Cloud 并且应用程序的配置存储在远程配置服务器(例如 Spring Cloud Config Server)上时才会使用/需要它。当然,如果在 SpringBoot 项目中,完全不使用 application.yml 配置文件,只使用 bootstrap.yml 也是可以的。此时的 bootstrap.yml 和 application.yml 是等价的。

bootstrap.yml 或 bootstrap.properties 也可以包含其他配置(例如默认值),但通常只需要在此处放置引导配置。如果你加入了其它配置,也是可以的。但这样,就会使引导配置文件膨胀起来。

牢记约定大于配置。另外,再给某些类、文件添加东西时,应该首先考虑做减法,减轻该类或文件的负担。如果确定添加的内容是合理的,符合单一原则的,再做加法。

我不知道上面的内容,大家有没有完全理解。下面我简单总结一下。

  • bootstrap.yml 优先级更高,比 application.yml 高
  • application.yml 通常使用与 SpringCloud 项目
  • application.yml 属于 SpringBoot 的配置,bootstrap.yml 可以理解为属于 SpringCloud 的配置
  • bootstrap.yml 用于从服务器获取配置
  • 如果从服务器获取到了配置,会覆盖 application.yml 中的配置,如果存在的话
  • 如果是 k8s 环境(spring-cloud-starter-kubernetes),bootstrap.yml 的另一个用途是从 kubernetes configmap 和 secret 资源加载配置。
  • bootstrap.yml 可以说是启动 Spring Boot 或启动 Spring Cloud 应用程序时加载的第一个文件。application.yml 是当前应用程序启动时加载的。

参考资料

  • https://docs.spring.io/spring-cloud-config/docs/current/reference/html/
  • https://stackoverflow.com/questions/32997352/what-is-the-difference-between-putting-a-property-on-application-yml-or-bootstra

浏览 100
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报