关于application和bootstrap的加载顺序及区别问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于application和bootstrap的加载顺序及区别问题相关的知识,希望对你有一定的参考价值。
参考技术A 最近做spring cloud 并利用 config 配置 可扩展的高可用eureka环境。遇到的问题。当第一台eureka注册中心启动时,并没有config配置中心存在,那么启动配置文件获取应该从本地获取。但是当config配置中心存在的时候不应该从本地获取配置,而是应该从配置中心进行配置。在学习config的时候了解到bootstrap的配置文件,则对bootstrap与application配置文件产生了好奇。他们的家在顺序以及配置覆盖的情况到底是怎么样的呢?
一、首先去百度网上的答案,但是大部分都引用了以下两条作出答案
抱歉没有阅读原文直接应用的,从字面意思理解bootstrap有限加载,没问题。但是外部属性加载并不会覆盖本地属性就产生问题了,我无法在本地文件存在的情况下对属性进行更新。接下来我进行了实验。
二、当不存在配置中心时候bootstrap与application并存的时候取相同属性,在实验中的出结论,bootstrap优先加载但属性依然被application覆盖。
接下来又进行了一个实验,bootstrap、application与配置中心同时存在的时候发现配置中心的属性会覆盖前两个。
通过两次实验的出,bootstrap、application与配置中心同时存在时,加载顺序为
bootstrap>>application>>配置中心
同时后者覆盖前者。
注:
spring boot版本为 2.1.2.RELEASE
spring cloud版本为Greenwich.SR2
Spring Boot 中application.yml与bootstrap.yml的区别
yml与properties
其实yml和properties文件是一样的原理,且一个项目上要么yml或者properties,二选一的存在。
推荐使用yml,更简洁。
bootstrap与application
1.加载顺序
这里主要是说明application和bootstrap的加载顺序。
- bootstrap.yml(bootstrap.properties)先加载
- application.yml(application.properties)后加载
bootstrap.yml 用于应用程序上下文的引导阶段。
bootstrap.yml 由父Spring ApplicationContext加载。
父ApplicationContext 被加载到使用 application.yml 的之前。
2.配置区别
bootstrap.yml 和application.yml 都可以用来配置参数。
- bootstrap.yml 可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。
- application.yml 可以用来定义应用级别的,如果搭配 spring-cloud-config 使用 application.yml 里面定义的文件可以实现动态替换。
使用Spring Cloud Config Server时,应在 bootstrap.yml 中指定:
- spring.application.name
- spring.cloud.config.server.git.uri
- 一些加密/解密信息
实例:
bootstrap.yml
spring:
application:
name: service-a
cloud:
config:
uri: http://127.0.0.1:8888
fail-fast: true
username: user
password: $CONFIG_SERVER_PASSWORD:password
retry:
initial-interval: 2000
max-interval: 10000
multiplier: 2
max-attempts: 10
当使用Spring Cloud时,通常从服务器加载“real”配置数据。为了获取URL(和其他连接配置,如密码等),您需要一个较早的或“bootstrap”配置。因此,您将配置服务器属性放在bootstrap.yml中,该属性用于加载实际配置数据(通常覆盖application.yml [如果存在]中的内容)。
当然,在一些情况上不用那么区分这两个文件,你只需要使用application文件即可,把全部选项都写在这里,效果基本是一致的,在不考虑上面的加载顺序覆盖的问题上。
以上是关于关于application和bootstrap的加载顺序及区别问题的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 中application.yml与bootstrap.yml的区别
spring cloud 配置文件application.yml和bootstrap.yml 的定位,区别和联系
在application.css.scss中@import“bootstrap”之后的Sass :: SyntaxError [关闭]