apollo local 模式_Apollo 分布式配置中心(补充)

1.   Namespace

1.1.  什么是Namespace

Namespace是配置项的集合,类似于一个配置文件的概念。

Apollo在创建项目的时候,都会默认创建一个“application”的Namespace。顾名思义,“application”是给应用自身使用的,熟悉Spring Boot的同学都知道,Spring Boot项目都有一个默认配置文件application.yml。在这里application.properties就等同于“application”的Namespace。对于90%的应用来说,“application”的Namespace已经满足日常配置使用场景了。

1.2.  客户端如何获取Namespace

2.  重新构建

git clone https://github.com/ctripcorp/apollo.git

修改完代码后调用 ${YOUR-WORKSPACE}/apollo/script/build.sh

执行完bulid.sh以后会再各个项目的target目录下生产zip包

于是,我们就可以得到以下三个包

apollo-adminservice-1.5.0-SNAPSHOT-github.zip

apollo-configservice-1.5.0-SNAPSHOT-github.zip

apollo-portal-1.5.0-SNAPSHOT-github.zip

解压后修改数据库连接地址后,启动

3.  增加可用的环境

前面我们通过执行初始化脚本来初始化数据库,在脚本的最后插入了几条初始化数据

因此,可以通过修改 apollo.portal.envs 字段的值来添加激活的(可用的)环境。直接修改初始化脚本,或者脚本执行完以后再执行update。例如:

1 UPDATE ApolloPortalDB.ServerConfig SET value = 'local,dev,test,prod' WHERE id = 1;

2 UPDATE ApolloPortalDB.ServerConfig SET value = '[{"orgId":"TEC","orgName":"技术部"}]' WHERE id = 2;

访问 http://localhost:8070/   (apollo/admin)

本例中,增加了TEST环境,还增加了一个Namespace

4.  API使用方式

API方式是最简单、高效使用Apollo配置的方式,不依赖Spring框架即可使用。

4.1.  获取默认namespace的配置

1 //config instance is singleton for each namespace and is never null

2 Config config = ConfigService.getAppConfig();

3 String someKey = "someKeyFromDefaultNamespace";

4 String someDefaultValue = "someDefaultValueForTheKey";

5 String value = config.getProperty(someKey, someDefaultValue);

通过上述的config.getProperty可以获取到someKey对应的实时最新的配置值。

另外,配置值从内存中获取,所以不需要应用自己做缓存。

4.2.  监听配置变化事件

监听配置变化事件只在应用真的关心配置变化,需要在配置变化时得到通知时使用,比如:数据库连接串变化后需要重建连接等。

如果只是希望每次都取到最新的配置的话,只需要按照上面的例子,调用config.getProperty即可。

1 //config instance is singleton for each namespace and is never null

2 Config config = ConfigService.getAppConfig();

3 config.addChangeListener(new ConfigChangeListener() {

4 @Override

5 public void onChange(ConfigChangeEvent changeEvent) {

6 System.out.println("Changes for namespace " + changeEvent.getNamespace());

7 for (String key : changeEvent.changedKeys()) {

8 ConfigChange change = changeEvent.getChange(key);

9 System.out.println(String.format("Found change - key: %s, oldValue: %s, newValue: %s, changeType: %s", change.getPropertyName(), change.getOldValue(), change.getNewValue(), change.getChangeType()));

10 }

11 }

12 });

4.3.  获取公共Namespace的配置

1 String somePublicNamespace = "CAT";

2 Config config = ConfigService.getConfig(somePublicNamespace);

3 String someKey = "someKeyFromPublicNamespace";

4 String someDefaultValue = "someDefaultValueForTheKey";

5 String value = config.getProperty(someKey, someDefaultValue);

4.4.  获取非properties格式namespace的配置

apollo-client 1.3.0版本开始对yaml/yml做了更好的支持,使用起来和properties格式一致。

1 Config config = ConfigService.getConfig("application.yml");

2 String someKey = "someKeyFromYmlNamespace";

3 String someDefaultValue = "someDefaultValueForTheKey";

4 String value = config.getProperty(someKey, someDefaultValue);

5.  实时动态调整日志级别

这个功能很实用

引入依赖

1 com.ctrip.framework.apollo

2 apollo-client

3 1.4.0

4

日志级别配置

1 package com.cjs.example.config;

2

3 import com.ctrip.framework.apollo.Config;

4 import com.ctrip.framework.apollo.model.ConfigChange;

5 import com.ctrip.framework.apollo.model.ConfigChangeEvent;

6 import com.ctrip.framework.apollo.spring.annotation.ApolloConfig;

7 import com.ctrip.framework.apollo.spring.annotation.ApolloConfigChangeListener;

8 import lombok.extern.slf4j.Slf4j;

9 import org.springframework.beans.factory.annotation.Autowired;

10 import org.springframework.boot.logging.LogLevel;

11 import org.springframework.boot.logging.LoggingSystem;

12 import org.springframework.context.annotation.Configuration;

13 import org.springframework.util.StringUtils;

14

15 import java.util.Set;

16

17 /**

18 * @author ChengJianSheng

19 * @date 2019-05-31

20 */

21 @Slf4j

22 @Configuration

23 public class LoggerConfig {

24

25 private static final String LOGGER_TAG = "logging.level.";

26

27 /**

28 * 注入默认的命名空间配置

29 */

30 @ApolloConfig

31 private Config config;

32

33 @Autowired

34 private LoggingSystem loggingSystem;

35

36 @ApolloConfigChangeListener

37 private void onChange(ConfigChangeEvent configChangeEvent) {

38 System.out.println("配置发生变化");

39 System.out.println("Changes for namespace " + configChangeEvent.getNamespace());

40 for (String key : configChangeEvent.changedKeys()) {

41 ConfigChange change = configChangeEvent.getChange(key);

42 System.out.println(String.format("Found change - key: %s, oldValue: %s, newValue: %s, changeType: %s", change.getPropertyName(), change.getOldValue(), change.getNewValue(), change.getChangeType()));

43 }

44

45 Set keyNames = config.getPropertyNames();

46 for (String key : keyNames) {

47 if (StringUtils.isEmpty(key)) {

48 continue;

49 }

50 if (!key.startsWith(LOGGER_TAG)) {

51 continue;

52 }

53

54 String loggerName = key.replace(LOGGER_TAG, "");

55 String strLevel = config.getProperty(key, "info");

56 LogLevel level = LogLevel.valueOf(strLevel.toUpperCase());

57 loggingSystem.setLogLevel(loggerName, level);

58

59 log.info("{}:{}", key, strLevel);

60 }

61 }

62

63 }

application.properties

1 server.port=9000

2

3 app.id=1001

4 env=LOCAL

5 apollo.meta=http://localhost:8080

6 apollo.cacheDir=/Users/chengjiansheng/data

7 apollo.bootstrap.enabled=true

修改配置

5.  工程结构

6.  文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值