Aopllo本地配置覆盖远程配置实现

前文
spring-boot:2.1.12
apollo-client: 1.6.0

一、实现本地配置覆盖远程配置实现

  1. Apollo客户端支持本地开发模式,这个主要用于当开发环境无法连接Apollo服务器的时候,这种方式主要用于无网情况下。
    在本地开发模式下,Apollo只会从本地文件读取配置信息,不会从Apollo服务器读取配置。

  2. apollo从4个维度去管理配置,分别是application (应用)、environment (环境)、cluster (集群)、namespace (命名空间)。所以我们可以新建一个专属本地开发的environment 的配置。

这与我设想的要不一样,本地开发模式属于离网模式下的纯本地配置读取。又不想新建environment去管理一份完整的配置。而且开发配置本身就已经建立了一套。

后来无意中发现

Apollo除了支持API方式获取配置,也支持和Spring/Spring Boot集成,集成原理简述如下。

Spring从3.1版本开始增加了ConfigurableEnvironment和PropertySource:

  • ConfigurableEnvironment
    • Spring的ApplicationContext会包含一个Environment(实现ConfigurableEnvironment接口)
    • ConfigurableEnvironment自身包含了很多个PropertySource
  • PropertySource 属性源 可以理解为很多个Key - Value的属性配置

PropertySource之间是有优先级顺序的,如果有一个Key在多个property source中都存在,那么在前面的property source优先

Apollo和Spring/Spring Boot集成的手段就呼之欲出了:在应用启动阶段,Apollo从远端获取配置,然后组装成PropertySource并插入到第一个即可。

于是有了下面这种实现方式:
1、在apollo创建一个公共namespace,比如local.properties,配置为空并发布

进入 Apollo Portal 界面,进入对应的应用,选择新增一个公共的namespace。我这边创建的私有的配置,私有的配置,只会创建在该应用,公共的会在所有应用中。
新增namespace
在这里插入图片描述
在这里插入图片描述

2、应用中引用该公共namespace并确保排序位于其它namespace之前,由于该namespace没有任何配置,所以对应用不会有任何影响。这里我建的是local,所以把local放第一位。

apollo.bootstrap.namespaces = local,application

3、在代码中resources下放一个META-INF/config/local.properties文件,在里面写入要覆盖的配置即可
在这里插入图片描述
配置文件使用本地配置参数。

这样就大功告成了,实现本地配置“覆盖”远程配置。

二、实现的原因

在Apollo中有预埋逻辑,会去尝试读取该文件作为namespace配置的补充。
DefaultConfig.java
在这里插入图片描述
在这里插入图片描述
这种方式是本人最喜欢的方式了。想复用环境的大部分的一些配置,部分配置使用本地的。而不是重新弄一份完整的本地配置。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要在本地连接远程Apollo服务器,你可以按照以下步骤进行操作: 1. 首先,确保你已经正确安装了Apollo软件,并且Apollo服务器已经在远程主机上运行。 2. 打开终端或命令提示符,使用ssh命令连接到远程主机。例如,如果你的远程主机IP地址是192.168.0.100,你可以运行以下命令连接到远程主机: ``` ssh username@192.168.0.100 ``` 其中,`username`是你在远程主机上的用户名。 3. 输入远程主机的密码进行身份验证,成功登录到远程主机后,你将在终端或命令提示符中看到远程主机的命令行界面。 4. 在远程主机上,进入到Apollo的安装目录。例如,如果Apollo安装在`/opt/apollo`目录下,你可以使用以下命令进入该目录: ``` cd /opt/apollo ``` 5. 启动Apollo服务器。运行以下命令启动Apollo服务器: ``` ./apollo.sh start ``` 6. 等待一段时间,直到Apollo服务器成功启动。你可以在终端或命令提示符中看到相关的启动日志。 7. 在本地计算机上,打开浏览器,并输入Apollo服务器的IP地址和端口号。例如,如果Apollo服务器在远程主机的80端口上运行,你可以在浏览器中输入以下URL进行访问: ``` http://192.168.0.100:80 ``` 其中,`192.168.0.100`是远程主机的IP地址,`80`是Apollo服务器的端口号。 8. 现在,你应该能够通过浏览器访问远程Apollo服务器,并在本地使用其功能。 请注意,上述步骤中的具体命令和路径可能因你的实际情况而有所不同。确保根据你的设置进行相应的调整。另外,确保远程主机上的防火墙配置允许从本地计算机访问Apollo服务器的端口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值