Apollo阿波罗配置中心
一、准备工作
1.2.1 AppId classpath:/META-INF/app.properties 内容app.id=YOUR-APP-ID
1.2.2 Environment 对于Mac/Linux,文件位置为/opt/settings/server.properties 例如env=DEV 详细见文档。
1.2.3 本地缓存路径 /opt/data/{appId}/config-cache (权限)
二、Maven Dependency
<dependency><groupId>com.ctrip.framework.apollo</groupId><artifactId>apollo-client</artifactId><version>0.7.0</version>
</dependency>
三、客户端用法
3.1 API使用方式
Config config = ConfigService.getAppConfig(); //config instance is singleton for each namespace and is never null
String someKey = "someKeyFromDefaultNamespace";
String someDefaultValue = "someDefaultValueForTheKey";
String value = config.getProperty(someKey, someDefaultValue);
3.1.2 监听配置变化事件
Config config = ConfigService.getAppConfig(); //config instance is singleton for each namespace and is never null
config.addChangeListener(new ConfigChangeListener() {@Overridepublic 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()));}}
});
3.1.3 获取公共Namespace的配置
String somePublicNamespace = "CAT";
Config config = ConfigService.getConfig(somePublicNamespace); //config instance is singleton for each namespace and is never null
String someKey = "someKeyFromPublicNamespace";
String someDefaultValue = "someDefaultValueForTheKey";
String value = config.getProperty(someKey, someDefaultValue);
3.2 Spring整合方式
3.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.xsdhttp://www.ctrip.com/schema/apollo http://www.ctrip.com/schema/apollo.xsd"><apollo:config order="2"/><!-- 这个是最复杂的配置形式,指示Apollo注入FX.apollo和FX.soa namespace的配置到Spring环境中,并且顺序在application前面 --><apollo:config namespaces="FX.apollo,FX.soa" order="1"/>
</beans>
3.2.3 Spring Annotation支持
Apollo同时还增加了两个新的Annotation来简化在Spring环境中的使用。
@ApolloConfig
用来自动注入Config对象
@ApolloConfigChangeListener
用来自动注册ConfigChangeListener
public class TestApolloAnnotationBean {@ApolloConfigprivate Config config; //inject config for namespace application@ApolloConfig("application")private Config anotherConfig; //inject config for namespace application@ApolloConfig("FX.apollo")private Config yetAnotherConfig; //inject config for namespace FX.apollo@Value("${batch:100}")private int batch;//config change listener for namespace application@ApolloConfigChangeListenerprivate void someOnChange(ConfigChangeEvent changeEvent) {//update injected value of batch if it is changed in Apolloif (changeEvent.isChanged("batch")) {batch = config.getIntProperty("batch", 100);}}//config change listener for namespace application@ApolloConfigChangeListener("application")private void anotherOnChange(ConfigChangeEvent changeEvent) {//do something}//config change listener for namespaces application and FX.apollo@ApolloConfigChangeListener({"application", "FX.apollo"})private void yetAnotherOnChange(ConfigChangeEvent changeEvent) {//do something}//example of getting config from Apollo directly//this will always return the latest value of timeoutpublic int getTimeout() {return config.getIntProperty("timeout", 200);}//example of getting config from injected value//the program needs to update the injected value when batch is changed in Apollo using @ApolloConfigChangeListener shown abovepublic int getBatch() {return this.batch;}
}
转载文章: Apollo配置
github
junit单元测试
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import java.util.Set;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring.xml")
public class TestApolloConfig {@Autowiredprivate ApolloUtil apolloUtil;@Testpublic void testAllconfig() throws Exception {Set<String> keys = apolloUtil.getPropertyNames();for (Object key : keys) {String val=apolloUtil.getString(key.toString());System.out.println(key.toString() + "===" + val);}}
}
2、Environment
对于Mac/Linux,文件位置为/opt/settings/server.properties
对于Windows,文件位置为C:\opt\settings\server.properties
3、本地缓存
Mac/Linux: /opt/data/{appId}/config-cache
Windows: C:\opt\data{appId}\config-cache
Apollo阿波罗配置中心相关推荐
- Apollo - 阿波罗配置中心使用,一文搞定!
Apollo基本概念 一.简介 Apollo - A reliable configuration management system Apollo的Github地址 Apollo(阿波罗)是携程框架 ...
- Apollo阿波罗配置中心基本概述
1.什么是Apollo: Apollo(阿波罗)是一款可靠的分布式配置管理中心,诞生于携程框架研发部,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流 ...
- linux阿波罗配置文件放在哪,Apollo阿波罗配置中心
一.准备工作 1.2.1 AppId classpath:/META-INF/app.properties 内容app.id=YOUR-APP-ID 1.2.2 Environment 对于Mac/ ...
- SpringCloud - Spring Cloud 之 Apollo Config携程阿波罗配置中心(二十一)
由于Spring Cloud自带的Config 需要配合 Bus 使用,且不能实时刷新,因此市面上出现了很多开元的配置中心 市面上开源的配置中心 Apollo(阿波罗):携程框架部门研发的分布式配置中 ...
- Apollo(阿波罗配置中心学习)- 实用详细
Apollo系列学习(阿波罗配置中心学习) 一.Apollo配置中心简单介绍 二.Windows 系统搭建基于携程Apollo配置中心单机模式 三.自定义Spring Boot项目通过配置中心启动项目 ...
- Apollo-阿波罗配置中心详细使用教程
Apollo基本概念 一.简介 Apollo - A reliable configuration management system Apollo的Github地址 Apollo(阿波罗)是携程框架 ...
- Apollo微服务配置中心详解
Apollo微服务配置中心详解 前言 一.Apollo架构 (一)简介 (二)角色介绍 (三)服务端实现 (四)客服端实现 二.Apollo部署 (一)准备数据库 (二)配置服务 1. 手动部署 (1 ...
- 阿波罗配置中心(apollo)的个人看法
阿波罗应该是近几年比较火的一个分布式配置中心了,说说我个人的理解,希望对一些人有用吧. 首先从使用者的角度想 我们怎么用配置中心的? 1.得有个页面,能有权限管理,能有创建配置key-value. 在 ...
- .NET Core + K8S + Apollo 玩转配置中心
1.引言 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理 ...
最新文章
- python uwsgi_python Web开发你要理解的WSGI uwsgi详解
- 一步步打造漂亮的新闻列表(无刷新分页、内容预览)(4)
- java class对象创建时机_Java面向对象编程-类的声明周期
- 批处理文件将多台连接的手机安装同一个APP
- 数据库中的范式和反范式详解!
- 窗口分析函数_5_计算累加乘
- MySQL高级 - 常用工具 - mysqlbinlog与mysqldump
- Java8函数式编程(3)--规约操作
- java中公用类_提示公用类型
- android标题显示栏菜单在标题之下,Android菜单项标题不显示
- 让Visual Studio 2013为你自动生成XML反序列化的类
- 机器学习从入门到精通50讲(九)-基于 ANTLR 自己实现一个 SQL 解析器
- Qt学习之Qt基础入门(下)
- 信息学奥赛一本通(1198:逆波兰表达式)
- Silverlight.XNA(C#)跨平台3D游戏研发手记:(一)差集运算在SLG战斗范围设定中的应用...
- 解决ifconfig没有网卡问题
- 匠能电子:55寸0.88mm拼接屏与1.7mm拼接屏的对比效果
- 深入浅出 CSS 动画
- 程序员来聊一聊信用卡(二)——对信用卡的一些基本认识
- 什么是支付通道,一篇文章了解支付通道理念