一、文件类型及加载过程
1. 文件名称组成:
[主文件名] - [后缀名] . [扩展名]
[bootstrap | application] [ -profile ] . [ properties | yaml ]
例如:
applicaiton-dev.properties
bootstrap-product.yaml
2. 加载文件所使用的【类库】:
application
文件由 spring-boot-starter
依赖的 spring-core
进行加载
bootstrap
文件由 spring-cloud-starter
依赖的 spring-cloud-context
进行加载
3. 加载策略:
总体策略是:根据文件位置、主文件的名称、后缀名称称、扩展名称进行顺序加载,同名属性进行覆盖,异名属性进行合并;加载全部结束后,完成容器的启动
二、文件的加载顺序:
文件的加载分为三个阶段(在不包含spring cloud config的情况下):
1. 第一阶段:在启动的工作区中加载
bootstrap → config/bootstrap → bootstrap-profile → → config/bootstrap-profile → [进入第二阶段]
2. 第二阶段: 在 classpath 中加载
bootstrap → config/bootstrap → bootstrap-profile → config/bootstrap-profile →
application → config/application → application-profile → config/application-profile → [进入第三阶段]
3. 第三阶段: 重新回到启动工作区中加载
application → config/application → application-profile → config/applicaton-profile → [结束]
三、例外情况
- 当启动参数中使用了
--spring.config.location=[启动配置文件]
时,以上顺序全部失效,而使用指定文件中的内容,不再有“覆盖和合并”的概念。 - 当使用了bootstrap,并且配置了:
spring.cloud.config
或者spring.cloud.nacos.config
时,此时将会使用远程配置文件的加载器,加载指定的 config server中的相关配置,然后再重新转回到正常的文件加载顺序中;同时“覆盖策略”将不再生效,即后序中的同名属性不会被覆盖掉;如果需要“覆盖策略”,可以在相应的 configServer 中进行如下配置(必须在config server中):
spring.cloud.config.allow-override=true
spring.cloud.config.override-none=true
spring.cloud.config.override-system-properties=false
网友评论