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. 启动程序,解决编译错误;
本文介绍了Apollo配置中心的多种接入方式,包括API、Spring及Spring Boot等,详细展示了如何通过不同方式获取配置、监听配置变更,并提供了Spring配置示例及Apollo特有注解介绍。
1247

被折叠的 条评论
为什么被折叠?



