> 文章列表 > springboot本地local配置覆盖远程Apollo配置(含Apollo配置加载顺序说明)

springboot本地local配置覆盖远程Apollo配置(含Apollo配置加载顺序说明)

springboot本地local配置覆盖远程Apollo配置(含Apollo配置加载顺序说明)

 手打不易,如果转摘,请注明出处!

注明原文:https://zhangxiaofan.blog.csdn.net/article/details/130302692


目录

前言

Apollo配置加载顺序

步骤

第一步:Apollo创建properties

第二步:添加namespaces(第一步创建的)

第三步:添加本地配置(用于覆盖Apollo配置)

 第四步:启动程序,校验正确性

源码分析


前言

我们在开发过程中,dev、st、uat、prd等都有各自的配置中心

一般本地开发我们用的是dev或者alpha配置中心,有的时候,方便本地开发和调试,需要修改某个配置,不可能每次都去修改Apollo配置中心。这样做的话不但会影响团队的其他人员,而且会导致配置中心的版本记录冗余。

那么我们有什么好的方法,可以本地local覆盖Apollo配置呢?答案是有的,只需要2个步骤就行了。

Apollo配置加载顺序

这里先大致介绍下Apollo的配置加载顺序。

1.按照 apollo.bootstrap.namespaces 顺序依次读取,本地同名 properties 会作为补充

2.同样的配置,按出现顺序优先——“谁先出现谁有效”

例如:

apollo.bootstrap.namespaces = application1,application2

那么会先加载  application1, 然后 application2。本地同名配置会作为补充,具体是指放到  src/main/resources/META-INF/config 下的同名配置 application1.properties 和 application2.properties

步骤

第一步:Apollo创建properties

在Apollo配置中心,新建一个私有private配置,我们暂定名字为: local.properties,这个配置不需要任何值,就是一个空文件

注意:为了不影响团队其他成员的开发,尽量不要创建公用public配置。

第二步:添加namespaces(第一步创建的)

修改本地配置 application.properties 文件,添加刚才创建的 local(namespace),为了保证本地的配置不被其他namesace覆盖,要放到第一个(保证没有被其他配置覆盖)

apollo.bootstrap.namespaces = local,application

 

第三步:添加本地配置(用于覆盖Apollo配置)

在路径 src/main/resources/META-INF/config 下新建 local.properties (与Apollo创建的名字保持一致),然后添加你想要覆盖远程的配置,例如:

server.servlet.context-path = /test

 

 第四步:启动程序,校验正确性

启动程序即可,你会发现,server.servlet.context-path 的值是本地配置“/test”了

源码分析

Apollo包下的一个类 com.ctrip.framework.apollo.internals.DefaultConfig

loadFromResource()代码如下,看到路径必须是:META-INF/config/%s.properties

这个代码的意思就是说:配置中心会将本地文件作为补充,以 local.properties 为例。

项目配置中 apollo.bootstrap.namespaces 添加了 local 后,会先读取 Apollo 配置中心的 local.properties ,然后再读取 本地 local.properties 中的配置作为补充,补充就是说如果Apollo配置中心没有,那么本地的 local.properties 就会添加到应用中。这就是为什么我们要创建一个空配置的原因。