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

Spring Cloud配置application.yml与bootstrap.yml区别及多profile配置 | Spring Cloud 6

一、前言

Spring Cloud 构建于 Spring Boot 之上,在 Spring Boot 中有两种上下文,一种是 bootstrap,另外一种是 application

1.1 两者区别

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

  • bootstrap.yml/bootstrap.properties :用来程序引导时执行,应用于更加早期配置信息读取。可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。

  • application.yml/application.yml :可以用来定义应用级别的, 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等。如果搭配 alibaba-nacos-config 使用, application.yml/application.yml里面定义的文件可以实现动态替换。

文件名.properties /文件名.yml文件名相同且同时存在时,文件类型properties的优先级高于yaml/yml

1.2 配置文件目录加载顺序

配置文件可以存在 4 个地方,按优先级从高到低是

  1. 项目根目录下的 config 文件夹
  2. 项目根目录
  3. classpath 下的 config 文件夹
  4. classpath

1.3 application和bootstrap加载顺序

application.yml/.propertiesbootstrap.yml/.properties 在同一目录下:bootstrap先加载,application 后加载

bootstrap 用于创建初始化 Bootstrap Contextapplication用于创建初始化Application Context

bootstrapapplication 共享同一个 EnvironmentEnvironment 它是任何 Spring 应用程序的外部属性的来源。bootstrap 属性以高优先级添加,因此默认情况下它们不能被本地配置覆盖。而 application 的配置项可以被覆盖(比如被application-dev 覆盖,或被 java 命令行覆盖)。

可通过参数spring.cloud.bootstrap.enabled=true完全禁用bootstrap

1.4 bootstrap应用

  • 配置alibaba-nacos-config基本连接信息,用于获取远程所需配置。alibaba-nacos-config 基本连接信息就不能写到 application.yml/.properties中等到 Application Context 初始化时才读取。必须在 bootstrap.yml/.properties 里配置,在初始化Bootstrap Context时完成读取, 在Application Context 初始化时利用已读取的alibaba-nacos-config 基本连接信息从alibaba-nacos-config 中获取所需的远程配置信息。
  • 一些固定的不希望被覆盖的属性,如程序的名字。
  • 一些加解密的场景。

二、application多profile配置

3.1 启动时No active profile set, falling back to 1 default profile: “default”

相信有不少细心小伙伴在新启动一个spring boot项目时候会发现这样一条信息no active profile set, falling back to default profiles: default。为什么会出现这样的提示呢,我们先来看看profileprofile是Spring对不同环境提供不同配置功能的支持,可以通过激活、 指定参数等方式快速切换环境profile。举个例子我们在开发,测试,生产用到的配置是不同的,那么通过profile就可以帮我们指定对应的环境用对应的配置,那么如何来指定呢?

3.2 多profile文件形式

格式:application-{profile}.properties/yml

如:
application-dev.properties/yml
application-test.properties/yml
application-prod.properties /yml

3.3 多profile在application配置激活

application.properties/yml 中配置

spring.profiles.active=dev

spring:profiles:active: dev

进行配置激活。

Spring Boot 在加载 application.properties/yml后还会加载 application-dev.properties/yml
并且如果两个文件有相同的配置项,那么 application.properties/yml 的会被 application-dev.properties/yml 覆盖。

  • 多个文件中,有同一个值,以先加载的为准(即先加载的优先级最高)。
  • 即优先级高的yml/.properties中有的值,在优先级低的yml/properties中就不做加载;但若高优先级yml/properties中没有的值,低优先级yml/.properties中要加。
http://www.lryc.cn/news/25670.html

相关文章:

  • springboot通过aop实现全局日志(是否自定义注解都可以)
  • k8s面试题-进阶
  • 预览版Edge申请微软new Bing失败解决方案
  • Spring中Bean生命周期及循环依赖
  • 【3.1】MySQL锁、动态规划、Redis缓存,过期删除与淘汰策略
  • Python+Yolov5跌倒检测 摔倒检测 人物目标行为 人体特征识别
  • 计算机底层:储存器的性能指标(CPU和内存等硬件的性能以及 对比标准)
  • 操作留痕功能实现与探讨
  • 深入浅出消息队列MSMQ
  • Maven多模块开发
  • QT之OpenGL帧缓冲
  • $ 6 :选择、循环
  • 【项目设计】高并发内存池 (四)[pagecache实现]
  • 玩转qsort——“C”
  • 【干货】又是一年跳槽季!Nginx 10道核心面试题及解析
  • 【线程安全的HashMap有哪些,CurrentHashMap底层是怎么实现线程安全的】
  • C语言-结构体【详解】
  • 浏览器输入url到页面渲染完成经历了哪些步骤
  • 大数据技术之Hadoop(Yarn)
  • 5.建造者模式
  • 数据库基础-数据库基本概念(1-1)
  • 学习笔记-架构的演进之服务容错策略-服务发现-3月day01
  • 采编式AIGC视频生产流程编排实践
  • Leetcode23. 合并k个升序链表
  • 从用户出发,互联网产品策划方法论
  • STM32 E18-D80NK红外检测
  • Linux常用命令--进程和计划任务管理
  • Unity TextMeshPro
  • 虹科分享| 浅谈HK-Edgility边缘计算平台
  • React Router v6详解