学习使用Apollo配置中心

摘要:
Apollo(阿波罗)是携程框架部门研发的配置管理平台,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端。Apollo官网地址如何安装服务端可以按照上面官网的步骤。这里主要说明一下应用如何接入apollo。

Apollo(阿波罗)是携程框架部门研发的配置管理平台,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端。

Apollo官网地址

如何安装服务端可以按照上面官网的步骤。

这里主要说明一下应用如何接入apollo。

应用接入apollo步骤:

1、Appid

确保classpath:/META-INF/app.properties文件存在,并且其中内容形如:app.id=YOUR-APP-ID

学习使用Apollo配置中心第1张

服务端的appid

学习使用Apollo配置中心第2张

2、Environment

应用在不同的环境可以有不同的配置, Environment可以通过以下3种方式的任意一个配置:

  • 2.1 通过Java的System Property env来指定环境
    -Denv=YOUR-ENVIRONMENT
  • 2.2 通过操作系统的System Environment env来指定环境
  • 2.3 通过配置文件来指定env=YOUR-ENVIRONMENT
    对于Mac/Linux,文件位置为/opt/settings/server.properties
    对于Windows,文件位置为C:optsettingsserver.properties
    目前,env支持以下几个值(大小写不敏感):
    DEV, FAT, UAT, PRO

服务端的environment

学习使用Apollo配置中心第3张

3、本地缓存

Apollo客户端会把从服务端获取到的配置在本地文件系统缓存一份,当去服务器读取配置失败时,会使用本地缓存的。

Mac/Linux: /opt/data/{appId}/config-cache

Windows: C:optdata{appId}config-cache

确保目录存在,且应用有读写权限。

4、添加依赖

<dependency>
    <groupId>com.ctrip.framework.apollo</groupId>
    <artifactId>apollo-client</artifactId>
    <version>0.6.2</version>
</dependency>

<repository>
	<id>internal.repo</id>
	<url>https://raw.github.com/ctripcorp/apollo/mvn-repo/</url>
</repository>

5、指定服务端

通过Java的System Property env来指定

-Ddev_meta=http://192.168.30.27:8018

6、读取配置

通过namespace读取配置,如果不指定则默认拿application

  • 6.1 api方式

通过api方式获取的配置,修改时不用重启项目,直接生效。

Config config = ConfigService.getAppConfig(); //ConfigService.getConfig(Namespace);
String key = "key"; //key
String defaultValue = "defaultValue"; //默认值,读取不到配置就会使用默认值,建议都加上默认值
String value = config.getProperty(key, defaultValue);

监听配置修改事件

Config config = ConfigService.getAppConfig(); //config instance is singleton for each namespace and is never null
config.addChangeListener(new ConfigChangeListener() {
    @Override
    public void onChange(ConfigChangeEvent changeEvent) {
        System.out.println("Changes for namespace " + changeEvent.getNamespace());
        for (String key : changeEvent.changedKeys()) {
            ConfigChange change = changeEvent.getChange(key);
            System.out.println(String.format("Found change - key: %s, oldValue: %s, newValue: %s, changeType: %s", change.getPropertyName(), change.getOldValue(), change.getNewValue(), change.getChangeType()));
        }
    }
});
  • 6.2 结合Spring方式

6.2.1 基于XML的配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:apollo="http://www.ctrip.com/schema/apollo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.ctrip.com/schema/apollo http://www.ctrip.com/schema/apollo.xsd">
    <!-- 这个是最简单的配置形式,一般应用用这种形式就可以了,用来指示Apollo注入application namespace的配置到Spring环境中 -->
    <apollo:config/>
    <!-- 这个是稍微复杂一些的配置形式,指示Apollo注入FX.apollo和FX.soa namespace的配置到Spring环境中 -->
    <apollo:config namespaces="FX.apollo,FX.soa"/>
    <bean class="com.ctrip.framework.apollo.spring.TestXmlBean">
        <property name="timeout" value="${timeout:100}"/>
        <property name="batch" value="${batch:200}"/>
    </bean>
</beans>

6.2.2 基于Java的配置

使用@Value(${key:defaultValue})

public class TestJavaConfigBean {
  @Value("${timeout:100}")
  private int timeout;
  private int batch;
 
  @Value("${batch:200}")
  public void setBatch(int batch) {
    this.batch = batch;
  }
 
  public int getTimeout() {
    return timeout;
  }
 
  public int getBatch() {
    return batch;
  }
}

@ApolloConfig用来自动注入Config对象
@ApolloConfigChangeListener用来自动注册ConfigChangeListener

public class TestApolloAnnotationBean {
  @ApolloConfig("application")
  private Config anotherConfig; //inject config for namespace application
 
  //config change listener for namespace application
  @ApolloConfigChangeListener("application")
  private void anotherOnChange(ConfigChangeEvent changeEvent) {
    //do something
  }
 
}

服务端的namespace:

学习使用Apollo配置中心第4张

免责声明:文章转载自《学习使用Apollo配置中心》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇yum安装程序报错:One of the configured repositories failed (Unknown),and yum doesn't have enough cached data to continueOHC Java堆外缓存详解与应用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

win7 &amp;amp; win10 安装AD管理工具

总所周知,AD域的作用对于一个公司有着无比重要的作用,但是在Win7/10系统下该如何去管理AD域呢。 对于AD域的服务器搭建,在这里我们不进行说明,感兴趣的同学可以去Google相关的资料,现在主要是讲解下如何在客户端为win7或者win10下,使用远程AD管理工具,来进行远程管理AD域,其中需要注意的是win10下的安装,对于远程AD域管理工具,微软...

第三方应用授权

概述 授权流程 第一步:URL拼接与引导授权 第二步:获取app_auth_code 第三步:使用app_auth_code换取app_auth_token 第四步:代替商户发起请求   概述 商户对第三方应用授权成功之后,第三方应用可以帮助商户完成相应的业务逻辑,比如可以代替商户发起当面付的收单请求; 授权采用标准的OAuth 2.0流程,只...

WPF 中托管 UWP

托管标准 UWP 控件 1. 新建空白应用(通用 Windows)项目,确保目标版本和最低版本均设置为 Windows 10 版本 1903 或更高版本。在 UWP 应用项目中,安装Microsoft.Toolkit.Win32.UI.XamlApplication 2. 修改App的默认基类为XamlApplication <xaml:XamlAp...

hbuilder(js+html+css)开发的APP效果实例

预约系统by cg 本系统组成:后台(驾校端)与APP(学员端)两部分组成。 学员以入学报名时的手机号登录APP可进行预约学车。 驾校方可在后台设置排班学车计划。 此模块效果具体如下: 后台-教练管理模块 首先添加教练:   后台-排班管理模块 培训时段设置 下一步在预约管理中设置培训时段   排班计划设置 设置好时段规则后,下一步设置预约排版计划:可...

软件架构 "4+1" 视图模型

1995年,Philippe Kruchten在《IEEE Software》上发表了题为《The 4+1 View Model of Architecture》的论文,引起了业界的极大关注。 论文原文:http://www.cs.ubc.ca/~gregor/teaching/papers/4+1view-architecture.pdf 翻译:http...

iframe的基本使用及利用nginx解决iframe跨域

一.场景 在前端大屏页面中,用iframe嵌套了手机模拟器,手机模拟器进入某个页面,这个页面调用接口实现单点登录 前端大屏地址:https://域名1:7443/1.html    通过nginx访问的页面 不可以调用成功接口的手机端地址:https://域名1/st_app/zlj_homepage/tourists_ys.html?utype=999...