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

1. bootstrap.yml配置文件

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

bootstrap.ymlapplication.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 ConfigNacos

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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SpringCloud微服务课程说明 1 网站架构演变过程 1 传统架构 1 分布式架构 1 SOA架构 1 微服务架构 2 微服务架构产生的原因 2 漫谈微服务架构 2 什么是微服务 2 微服务架构特征 3 微服务架构如何拆分 3 微服务架构与SOA架构区别 3 SpringCloud微服务框架 3 为什么选择SpringCloud 4 SpringCloud简介 4 服务治理SpringCloud Eureka 5 什么是服务治理 5 服务注册与发现 5 搭建注册心 6 常用注册心框架 6 注册心环境搭建 6 注册服务提供者 8 服务消费者 11 高可用注册心 14 Eureka高可用原理 14 Eureka集群环境搭建 14 Eureka详解 17 使用Eureka闭源了闭源了怎么办? 21 使用Consul来替换Eureka 21 使用Zookeeper来替换Eureka 25 Consistency(一致性), 数据一致更新,所有数据变动都是同步的 Availability(可用性), 好的响应性能 Partition tolerance(分区容忍性) 可靠性 28 客户端负载均衡器 29 客户端负载均衡器 29 Ribbon与Nginx区别 29 RestTemplate 31 请求类型 31 负载均衡器源码分析 33 负载均衡器重试机制 33 服务保护机制SpringCloud Hystrix 33 微服务高可用技术 33 服务降级、熔断、限流概念 34 服务学崩效应 34 服务降级 34 服务熔断 35 服务隔离 35 服务限流 36 Hystrix简单介绍 36 Hystrix环境搭建 37 Maven依赖信息 37 开启Hystrix断路器 37 服务降级处理 38 Hystrix仪表盘 39 Turbine集群监控 39 声明式服务调用SpringCloud Feign 39 feign介绍 39 环境搭建 40 Maven依赖信息 40 feign客户端接口 40 feign继承特性 41 创建springcloud-2.0-parent 42 Ribbon配置 45 配置Feign客户端超时时间 45 Api网关服务SrpingCloud Zuul 45 网关分类 46 网关设计 46 网关框架 48 网关作用 49 网关与过滤器区别 49 Nginx与Zuul的区别 49 Zuul网关 49 动态网关 53 网关集群 55 分布式配置中心SrpingCloud config 57 SpringCloud分布式配置中心 57 Config架构 58 Git环境搭建 58 服务端详解 58 Maven依赖信息 58 application.yml配置 59 项目启动 60 客户端详解 60 Maven依赖信息 60 bootstrap.yml 61 读取配置文件 62 动态刷新数据 62 actuator端点刷新数据 63 Maven依赖信息 63 Bootstrap.xml新增 63 include: "*" 63 生效前提 63 private String itmayieduInfo; 63 当配置更改时,标有@RefreshScope的Bean将得到特殊处理来生效配置 64 手动刷新接口 64 分布式服务跟踪SpringCloud sleuth 64 什么是Sleuth 64 环境搭建 64 构建server-zipkin 64 会员服务 65 订单服务 65 Swagger2API接口管理 65 课题引入 65 传统的API文档编写存在以下几个痛点: 66 Swagger具有以下优点 66 Swagg er 2.0 集成配置 66 Maven依赖信息 66 SwaggerConfig 68 Zull整合Swagger管理微服务所有API 68 会员和订单引入Maven依赖 68 ZuulGateway网关 69
# springcloud-zone #### 项目介绍 项目为学习用途搭建,主要包括以下模块: springcloud-register:服务注册心 (eureka-server),提供服务注册与发现功能。 springcloud-config:远程配置中心,分为git与native两个版本,为producer提供远程配置springcloud-connect:数据连接心,包含DB、Redis、MQ、Mail等组件的配置入口,只需其他模块在pom添加依赖并提供相关配置即可快速接入。 springcloud-producer:服务提供者,包含具体的业务逻辑实现等。 springcloud-consumer:服务消费者,从eureka server获取producer提供的服务。 springcloud-gateway:网关接口,暴露给调用方调用,包含负载均衡、重试、熔断等功能。 springcloud-zipkin:链路跟踪工具,监控并就持久化微服务集群调用链路的通畅情况,采用rabbitmq异步传输、elasticsearch负责持久化的方式集成。 #### 软件架构 1、JDK:jdk-8u181-windows-x64。 2、MAVEN:apache-maven-3.5.4 3、IDE:spring-tool-suite-3.9.3.RELEASE-e4.7.3-win32-x86_64 4、springboot:1.5.10.RELEASE。 5、springcloud:Edgware.SR2版本 #### 安装教程 需要提前安装如下程序: 1、ActiveMQ。 2、RabbitMQ。 3、Redis 4、Elasticsearch。 5、Elasticsearch-head。 6、MYSQL(执行springcloud-producer目录src/main/resources/templates/datasource.text的建表语句) #### 使用说明 项目运行顺序: 1、 springcloud-register, 2、 springcloud-config-native或者springcloud-config-git: 启动git远程配置中心需要修改springcloud-producer项目bootstrap.yml配置文件,并将配置配件上传到git上。 3、springcloud-zipkin。 4、 springcloud-producer。 5、springcloud-consumer。 6、springcloud-gateway. 注: 在测试gateway负载均衡时可以启动单个项目的多个实例,具体方式如下: 1、项目启动类右键run as->run configurations..,打开配置框。 2、java application右键new,打开新建窗口。 3、顶部tab选Main,在name填写启动类名称,project填写项目名称,main class填写启动类详细路径+类名。 4、顶部tab选Arguments,在VM arguments填写-Dserver.port=端口号,比如-Dserver.port=8080 5、点击run即可以配置的端口号启动多个项目实例了。 #### 参与贡献 ningchongqing

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.D.Chuang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值