本人为第一次接触apollo,如下为我自己配置的过程,仅供参考。
本文只包含Apollo的使用端配置;apollo服务端不包含。
前置准备工作:
1、创建spring boot的项目。
2、Apollo服务端已经搭建并获取到 “登录地址” 和 “应用连接地址”【采坑:注意这里有两个地址,是不一样】
3、使用Apollo登录地址,进行登录apollo配置中心(用户密码在搭建服务端是获取,或者咨询相关搭建人),进行配置项目名(app.id);我这里是:fmfcps_dev(命名根据项目组的要求自行命名即可,无特别限制)。
4、配置你要的配置项key-value
配置完了记得点发布。
开始配置》》》》》》》》》》》》》》
1、在pom文件中添加Apollo的依赖
<!--apollo相关jar包-->
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-core</artifactId>
<version>1.1.0</version>
</dependency>
这里采坑一下,这里依赖注入的jar 可能和原有项目的jar冲突了(版本不一致或者引用),导致Apollo有问题 ;如果有就在maven引用哪里查看一下,把冲突的jar 在pom.xml中重新引入一下,即可解决。
这里可以看见,包被覆盖了;
重新引用
2、编写application.yml文件
apollo.bootstrap.namespaces: DEPT.hilo-base-config,application
apollo:
meta: 这里配置Apollo应用连接地址(采坑:别配置成登录地址了,是应用连接地址)
bootstrap:
eagerLoad:
enabled: true
3、配置app.propreties;这里可以将这个配置 加入到application.yml文件一起(我这里是项目组要求建立该文件)。
app.id=你在应用中心配置项目key
如果放在application.yml文件中如下:
app:
id: 你在应用中心配置项目key
apollo.bootstrap.namespaces: DEPT.hilo-base-config,application
apollo:
meta: 这里配置Apollo应用连接地址(采坑:别配置成登录地址了,是应用连接地址)
bootstrap:
eagerLoad:
enabled: true
4、springboot启动类添加注解@EnableApolloConfig
5、Apollo配置项的使用
1)在配置文件中使用,如数据库连接之类
2)使用注解方式使用
3)方法获取配置项
在开发中根据不同的场景。
配置文件:
使用${在Apollo上配置的key}
注解方式:
方法获取配置项:
上面截图中java类代码,可以直接运行main:
import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.ConfigChangeListener;
import com.ctrip.framework.apollo.ConfigService;
import com.ctrip.framework.apollo.model.ConfigChange;
import com.ctrip.framework.apollo.model.ConfigChangeEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SimpleApolloConfigDemo {
private static final Logger logger = LoggerFactory.getLogger(SimpleApolloConfigDemo.class);
private String DEFAULT_VALUE = "undefined";
private Config config;
public SimpleApolloConfigDemo() {
ConfigChangeListener changeListener = new ConfigChangeListener() {
@Override
public void onChange(ConfigChangeEvent changeEvent) {
logger.info("Changes for namespace {}", changeEvent.getNamespace());
for (String key : changeEvent.changedKeys()) {
ConfigChange change = changeEvent.getChange(key);
logger.info("Change - key: {}, oldValue: {}, newValue: {}, changeType: {}",
change.getPropertyName(), change.getOldValue(), change.getNewValue(),
change.getChangeType());
}
}
};
config = ConfigService.getAppConfig();
config.addChangeListener(changeListener);
}
private String getConfig(String key) {
String result = config.getProperty(key, DEFAULT_VALUE);
logger.info(String.format("Loading key : %s with value: %s", key, result));
return result;
}
public static void main(String[] args) throws IOException {
SimpleApolloConfigDemo apolloConfigDemo = new SimpleApolloConfigDemo();
String key ="appname";
String value apolloConfigDemo.getConfig(key);
System.out.print("value:"+value);
}
}
另外说明:
Apollo配置apollo.meta 参数的方式有很多种方式;具体可以参考: https://github.com/ctripcorp/apollo/wiki/Java客户端使用指南
里面的方式有8、9种,我目前尝试了 application 方式 和 jvm方式
jvm配置方式如下
在启动项的jvm中配置 “应用连接地址”,重跑;
jvm 中加入(dev 代表运行环境为dev):
-Denv=dev
-Ddev_meta=应用连接地址
idea中配置 jvm
注意:Apollo会在本地缓存数据,新增了配置 需要删除本地缓存文件;
缓存在 c:/opt/data/XX ;xx为你的 “app.id”;删除文件即可。
也可以自定义缓存路径 具体可以参考 https://github.com/ctripcorp/apollo/wiki/Java客户端使用指南