java的Apollo的功能_Apollo的基本概念和集成实战

本文介绍了Apollo配置中心的多种接入方式,包括API、Spring及Spring Boot等,详细展示了如何通过不同方式获取配置、监听配置变更,并提供了Spring配置示例及Apollo特有注解介绍。

com.ctrip.framework.apollo

apollo-client

1.1.0

```

**接入方式对比**

|接入方式|特点|

|-|-|

|api|灵活,功能完备|

|spring|placeholder方式|

|springboot|@ConfigurationProperties|

### API接入

> 获取application namespace配置

```java

Config config = ConfigService.getAppConfig();

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

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

```

> 获取公共namespace

```java

String somePublicNamespace = "CAT";

Config config = ConfigService.getConfig(somePublicNamespace);

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

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

```

获取非properties格式的namespace配置

```java

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

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

```

> xml格式文件获取

```java

String someNamespace = "test";

ConfigFile configFile = ConfigService.getConfigFile("test", ConfigFileFormat.XML);

String content = configFile.getContent();

```

> 事件监听

```java

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()));

}

}

});

```

### spring方式接入

> 基于xml

```xml

```

> 基于javaconfig

```java

//这个是最复杂的配置形式,指示Apollo注入FX.apollo和application.yml namespace的配置到Spring环境中,并且顺序在application前面

@Configuration

@EnableApolloConfig(order = 2)

public class SomeAppConfig {

@Bean

public TestJavaConfigBean javaConfigBean() {

return new TestJavaConfigBean();

}

}

@Configuration

@EnableApolloConfig(value = {"FX.apollo", "application.yml"}, order = 1)

public class AnotherAppConfig {}

```

### springboot方式接入

> 直接配置属性

```text

#加载应用对应的application namespace的配置

apollo.bootstrap.enabled = true

#加载其它namespace 的配置

apollo.bootstrap.namespaces = application,FX.apollo,application.yml

#在日志系统启动之前加载阿波罗

apollo.bootstrap.eagerLoad.enabled=true

```

### 其它说明

>一些公共的注解

新增的spring注解

* @ApolloConfig

用来自动注入Config对象

* @ApolloConfigChangeListener

用来自动注册ConfigChangeListener

* @ApolloJsonValue

用来把配置的json字符串自动注入为对象

### 配置的迁移

配置的迁移

1. apollo中创建对应的项目;

1. 在应用中创建好META-INF/app.properties,并配置好;

1. 原来的配置文件,转换为properties,贴到apollo后台;

1. 删除本地的配置;

### 本地开发

1. 修改 /opt/settins/server.properties

设置env = Local

1. 准备本地配置文件 位置:

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

Windows: C:\opt\data\{appId}\config-cache

1. 修改本地配置不会检测到实时变化,需要重启应用;

# 现有项目改造步骤

1. 去掉disconf的依赖,找到对应的xml,去掉申明的配置bean;

2. 搜索对应的@Disf,如果在类上,直接去掉,如果在方法或者字段上,替换为@Value注解;

3. 增加apollo的xml配置;

```xml

```

1. 因为之前的依赖类路径下存在mysql.properties ; 而apollo没有生成那么多的文件;

1. 在apollo后台,从disconf后台中把项目都有的配置放到application.properties下;

1. 新建私有命名空间 log4j2.xml,把日志配置copy,放到里面发布;

1. 如有跟公共配置相同的key,需要重写的,则关联公共命名空间重写;

1. 启动程序,解决编译错误;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值