SpringCloud的项目中bootstrap.yml配置文件与配置中心配置 您所在的位置:网站首页 bootstrap值怎么看 SpringCloud的项目中bootstrap.yml配置文件与配置中心配置

SpringCloud的项目中bootstrap.yml配置文件与配置中心配置

2024-05-24 06:33| 来源: 网络整理| 查看: 265

1. bootstrap.yml配置文件

在 SpringCloud 的项目中,我们常常会碰到另外一个配置文件 bootstrap.yml。这个配置文件主要是用于应用程序上下文的引导阶段,该配置文件的加载是在 application.yml 之前。

bootstrap.yml和application.yml文件的区别可参考:What is the difference between putting a property on application.yml or bootstrap.yml in spring boot

在SpringCloud中有两种上下文,一种是bootstrap,另外一种是application, bootstrap是应用程序的父上下文。官方的原话是A Spring Cloud application operates by creating a “bootstrap” context, which is a parent context for the main application。

bootstrap.yml配置文件的使用场景:

使用配置中心时,这时需要在bootstrap配置文件中添加连接到配置中心的信息,来加载外部配置中心的配置信息一些固定的不能被覆盖的属性一些加密/解密的信息

项目中 bootstrap.yml 示例

spring: application: name: profiles: active: local cloud: nacos: # 远程配置 config: server-addr: namespace: group: ${spring.profiles.active} file-extension: yml # 服务发现 discovery: server-addr: namespace: group: ${spring.profiles.active} 2. 配置中心的配置

在 SpringCloud 项目中,我们的配置常由配置中心进行统一管理,这就涉及到本地与远程配置文件的优先级问题。这里只说明遇到过的两种:SpringCloud Config和Nacos。

2.1. SpringCloud Config

SpringCloud Config中的远程配置,默认是无法被本地覆盖,如果需要本地配置覆盖远程配置,需要在远程做如下配置:

spring: cloud: config: allowOverride: true overrideNone: true overrideSystemProperties: false

上面的说法可以在如下链接中得到验证:https://cloud.spring.io/spring-cloud-commons/multi/multi__spring_cloud_context_application_context_services.html#overriding-bootstrap-properties

2.2. Nacos

Nacos中的远程配置,似乎不支持本地覆盖,在Nacos项目中Issue中得到证实,似乎官方也没有这种打算。值得一提的是,即使通过命令行指定的参数,也不能覆盖远程配置。

3. 实践

开发过程中,希望服务(serviceA)的某些节点的配置与其他节点配置不同,刚开始的想法是在启动命令行加入参数 spring.application.name=serviceB,然后在配置中心 nacos 中复制一份serviceA的配置命名为 service B。但是实际测试中,不能修改application.name的值,因为参与到一些业务配置。

接着我们想直接在命令行中加入区别于其他节点的参数,希望能够覆盖远程的配置,但前面也说过,命令行的配置无法覆盖远程Nacos配置,且Nacos没有提供支持覆盖的开关,所以也没能达到我们预期的结果。

实际测试的结果,配置优先级:nacos上的配置 > 命令行配置 > system env > classpath:application.yml> classpath:bootstrap.yml

最后我们发现nacos支持指定服务配置,以及服务发现的名称,这些配置是在 bootstap.yml 文件中指定,默认值是 spring.application.name。实际测试结果,通过命令行可以覆盖该文件中的配置,这样正好能够满足我们的需求:不修改application.name,又可以使部分节点的配置区别于其他节点。

java -jar ./app.jar --spring.profiles.active=local --spring.cloud.nacos.config.name=serviceB --spring.cloud.nacos.discovery.service=serviceB


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有