在Spring Cloud项目里,将Nacos配置相关信息配置在bootstrap.yml
(或bootstrap.properties
)而不是application.yml
(或application.properties
)才能生效,这主要和Spring Cloud的配置加载顺序与机制有关,下面详细解释:
1. 配置加载顺序
Spring Cloud应用启动时,会按特定顺序加载配置,bootstrap.yml
的加载时机早于application.yml
。
bootstrap.yml
:它属于Spring Cloud Context上下文的一部分,在Spring Boot的主应用上下文(application.yml
对应的上下文)创建之前加载。其作用是负责加载一些基础的、必要的配置信息,为后续应用的启动和配置加载提供支撑。application.yml
:这是Spring Boot默认的配置文件,在bootstrap.yml
加载完成后才会加载,用于配置应用自身的一些常规属性。
2. Nacos配置加载原理
Nacos作为Spring Cloud的配置中心,在应用启动时需要提前获取相关配置信息,而这些信息依赖于一些基础配置,比如Nacos服务器地址、命名空间、Data ID等。
bootstrap.yml
:由于它先被加载,所以可以在这里配置Nacos的连接信息和要加载的配置文件信息。Spring Cloud会依据这些配置,在主应用上下文创建之前就从Nacos服务器获取相应的配置,并将其注入到应用环境中。这样,当应用后续加载application.yml
以及启动时,就能使用从Nacos获取的配置了。application.yml
:如果把Nacos的配置信息放在application.yml
中,此时Spring Cloud还没有依据这些信息从Nacos获取配置,因为application.yml
的加载是在Nacos配置获取机制启动之后,所以无法正确加载Nacos上的配置。
3. 示例说明
假设要从Nacos加载数据库配置,配置在bootstrap.yml
和application.yml
中的效果如下:
bootstrap.yml
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
namespace: your-dev-namespace