Loading

Spring Boot 2.x中配置文件加载顺序分析

一般spring boot 2.x的配置有多种方式,如resources文件夹中可以定义bootstrap.yml(或bootstrap.properties)、application.yml(或application.properties)、配置中心(如nacos),那么它们加载顺序是怎样的,如何使用?

顺序说明

  • bootstrap.yml:首先加载bootstrap.yml(或bootstrap.properties)。这个文件用于配置应用程序的上下文(ApplicationContext),通常用于加载外部配置,如服务发现和配置中心的属性。bootstrap.yml中的属性具有更高的优先级,并且通常用于设置需要尽早读取的配置项,如你可以配置Nacos相关的属性,如服务名称、配置中心地址、命名空间、分组等信息。
  • nacos: Spring Cloud Alibaba会根据bootstrap文件中的配置信息从Nacos配置中心拉取远程配置。这些远程配置会与bootstrap.yml合并,并且具有更高的优先级。
  • application.yml:在bootstrap.yml和nacos远程配置加载完成后,接着加载application.yml(或application.properties)。这个文件用于配置Spring Boot应用程序的各个组件,包括内置的Spring应用程序上下文。application.yml中的属性用于覆盖或补充bootstrap.yml和nacos中的配置。

在Nacos配置中心中,您可以为不同的环境(如开发、测试、生产)设置不同的配置集。当应用程序启动时,它会首先从Nacos获取与当前环境匹配的配置集,然后将其与本地配置合并。
需要注意的是,Nacos配置中心的配置可以在应用程序运行时动态刷新,这意味着您可以在不重启应用程序的情况下更改配置。这种能力使得Nacos成为一个强大的配置管理工具。
总的来说,结合Nacos时,配置加载的顺序是:bootstrap文件 -> Nacos远程配置 -> application文件。这样的设计允许您在不同的环境中灵活地管理和部署应用程序配置。

示例

当使用Spring Boot结合Spring Cloud Alibaba Nacos时,配置加载的顺序可以通过以下步骤来详细说明:

  1. bootstrap.yml/bootstrap.properties:这个文件首先被加载,用于配置Nacos配置中心的相关信息。例如:
spring:
  application:
    name: my-service
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        namespace: 9777e8cec7faaef030f3e6b5b2a1c9b3
        group: DEFAULT_GROUP
        file-extension: yaml
        enabled: true
  1. Nacos远程配置:根据bootstrap文件中的配置信息,Spring Cloud Alibaba会从Nacos配置中心拉取远程配置。例如,如果您的服务名为my-service,并且Nacos配置中心的文件扩展名为yaml,那么Nacos会尝试从配置中心拉取my-service.yaml文件。假设my-service.yaml文件内容如下:
server:
  port: 8080
  1. application.yml/application.properties:最后加载本地application配置文件。这个文件中的配置可以覆盖或补充从Nacos配置中心拉取的配置。例如:
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: myuser
    password: mypassword

最终,您的应用程序将合并这些配置。在这个例子中,服务端口将被设置为8080(来自Nacos远程配置),数据源配置将从本地application.yml文件中获取。
此外,Nacos还支持多个配置集,您可以为不同的环境(如开发、测试、生产)设置不同的配置。您可以通过在bootstrap文件中指定spring.profiles.active来选择不同的配置集。例如:

spring:
  profiles:
    active: dev

这将导致Nacos尝试从配置中心拉取my-service-dev.yaml文件作为远程配置。
请注意,这个例子仅用于说明配置加载的顺序,实际配置内容可能会根据您的应用程序需求而有所不同。

posted @ 2024-03-13 14:53  集君  阅读(25)  评论(0编辑  收藏  举报