Bootstrap.yml的作用

简介: Bootstrap.yml的作用

Bootstrap.yml的作用

加载顺序

若application.yml 和bootstrap.yml 在同一目录下:bootstrap.yml 先加载 application.yml后加载

bootstrap.yml 用于应用程序上下文的引导阶段。bootstrap.yml 由父Spring ApplicationContext加载。

配置区别

bootstrap是spring cloud的配置上下文加载。由spring-cloud-content包加载。

引入依赖

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter</artifactId>
</dependency>

application是spring boot的配置加载。

引入依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Snipaste_2021-06-24_14-32-02.png

具体加载类

image-20210624143603126.png

部分代码

@Override
public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) {
 ConfigurableEnvironment environment = event.getEnvironment();
  //# spring.cloud.bootstrap.enabled 引导开关
 if (!environment.getProperty("spring.cloud.bootstrap.enabled", Boolean.class,
   true)) {
  return;
 }
 // don't listen to events in a bootstrap context
 if (environment.getPropertySources().contains(BOOTSTRAP_PROPERTY_SOURCE_NAME)) {
  return;
 }
 ConfigurableApplicationContext context = null;
  // 引导文件名称 默认bootstrap
 String configName = environment
   .resolvePlaceholders("${spring.cloud.bootstrap.name:bootstrap}");
  // 加载配置
 for (ApplicationContextInitializer<?> initializer : event.getSpringApplication()
   .getInitializers()) {
   // 从ParentContent加载
  if (initializer instanceof ParentContextApplicationContextInitializer) {
   context = findBootstrapContext(
     (ParentContextApplicationContextInitializer) initializer,
     configName);
  }
 }
 if (context == null) {
  context = bootstrapServiceContext(environment, event.getSpringApplication(),
    configName);
  event.getSpringApplication()
    .addListeners(new CloseContextOnFailureApplicationListener(context));
 }

 apply(context, event.getSpringApplication(), environment);
}

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

bootstrap.yml 用来程序引导时执行,应用于更加早期配置信息读取。可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。一旦bootStrap.yml 被加载,则内容不会被覆盖。

application.yml 可以用来定义应用级别的, 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等。

属性覆盖问题

启动上下文时,Spring Cloud 会创建一个 Bootstrap Context,作为 Spring 应用的 Application Context 的父上下文。

初始化的时候,Bootstrap Context 负责从外部源加载配置属性并解析配置。这两个上下文共享一个从外部获取的 Environment。Bootstrap 属性有高优先级,默认情况下,它们不会被本地配置覆盖。

也就是说如果加载的 application.yml 的内容标签与 bootstrap 的标签一致,application 也不会覆盖 bootstrap,而 application.yml 里面的内容可以动态替换。

bootstrap.yml典型的应用场景

微服务的 注册中心、配置中心、项目名称spring.application.name

以nacos为例

spring:
  application:
    name: paw-alibaba-nacos
  # profile
  profiles:
    active: dev

  # nacos
  cloud:
    nacos:
      discovery:
        server-addr: http://localhost:8848
        username: nacos
        password: 123456

      config:
        server-addr: http://localhost:8848
        username: nacos
        password: 123456
        context-path: nacos
        file-extension: yaml
        prefix: ${spring.application.name}

springcloud 2020.0 默认不优先加载bootstrap.yml

nacos报错Param ‘serviceName‘ is illegal, serviceName is blank,但是我在bootstrap.yml文件中配置了服务名

解决:

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-bootstrap</artifactId>
   <version>3.0.4</version>
</dependency>
相关文章
|
SpringCloudAlibaba 网络协议 Cloud Native
Spring Cloud Alibaba-全面详解(学习总结---从入门到深化)
Spring Cloud Alibaba致力于提供微服务开发的一站式解决方案。
15638 2
Spring Cloud Alibaba-全面详解(学习总结---从入门到深化)
|
Java 数据库连接 数据库
springboot启动配置文件-bootstrap.yml常用基本配置
以上是一些常用的基本配置项,在实际应用中可能会根据需求有所变化。通过合理配置 `bootstrap.yml`文件,可以确保应用程序在启动阶段加载正确的配置,并顺利启动运行。
1521 2
|
消息中间件 JSON Java
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
27162 0
|
IDE Java 编译器
lombok编译遇到“找不到符号的问题”
【9月更文挑战第18天】当使用 Lombok 遇到 “找不到符号” 的问题时,可能是由于 Lombok 未正确安装、编译器不支持、IDE 配置不当或项目构建工具配置错误。解决方法包括确认 Lombok 安装、编译器支持,配置 IDE 和检查构建工具配置。通过这些步骤通常可解决问题,若问题仍存在,建议检查项目配置和依赖,或查看日志获取更多信息。
5336 2
|
Java 数据库连接 mybatis
成功解决: Invalid bound statement (not found) 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决
这篇文章讨论了在已使用MyBatis的项目中引入MyBatis-Plus后出现的"Invalid bound statement (not found)"错误,并提供了解决方法,主要是通过修改yml配置文件来解决MyBatis和MyBatis-Plus共存时的冲突问题。
成功解决: Invalid bound statement (not found) 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决
|
存储 缓存 JSON
详解HTTP四种请求:POST、GET、DELETE、PUT
【4月更文挑战第3天】
70485 5
详解HTTP四种请求:POST、GET、DELETE、PUT
|
Java 关系型数据库 MySQL
【已解决】SpringBoot 启动报错:Failed to configure a DataSource: ‘url‘ attribute is not specified and no emb
【已解决】SpringBoot 启动报错:Failed to configure a DataSource: ‘url‘ attribute is not specified and no emb
7654 1
|
网络协议
|
Java Spring
spring boot构建Stomp客户端
配置包括三部分,一个是基本的websocket客户端配置,另一个是Stomp客户端配置和会话处理
484 0
|
Java 开发工具 数据安全/隐私保护
深入理解Spring Cloud中的配置中心
深入理解Spring Cloud中的配置中心