Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

具体介绍可参照github:https://github.com/ctripcorp/apollo

这是需要添加的依赖。

com.ctrip.framework.apollo

apollo-client

1.1.0

com.google.guava

guava

19.0

图为apollo的页面详情;

f4a48d010f19b3d3a0b231966d2ce34c.png

用户在用java连接apollo时,需要创建app.properties在META-INF的文件夹下,而META-INF必须在resources下面,另外还需要创建aopollo-env.properties。

98112aafbdcdfac9264ce24f44c9c64c.png

首先介绍app.properties

在apollo配置中心中存在AppId,这是每一个项目的唯一标识,因此app.properties内需要确定,你需要使用哪个项目的配置信息

d962da206a803e1881dfe00144ad736e.png           

6cd46ef52184d19be28e60f851fa9b11.png

f2b8f94d720bc5ac595bd87790d827fc.png

因为apollo在java中也需要远程连接apollo配置信息的数据,因此可以加入apollo.meta={ip}:8080,因为apollo一般是8070的端口,但我们获取数据的端口一般是8080,这个具体需要与运维了解他们的配置的apollo的端口。这种方式也可以获取apollo的具体数据,这似乎我们已经可以连接apollo获取数据了,感觉之前图中的apollo-env.properties,好像没有什么作用了,但是在实际开发中,我们不可能只有一个环境,开发有开发环境,测试有测试环境,生产有生产环境,因此我们一般不会写死apollo.meta,采用中间的图的app.id,不同环境仅是服务器不同,但我们保持app.id一致。

apollo-env.properties中就是用来配置不同环境访问不同的apollo配置中心的,apollo允许用户配置四个不同的环境,分别是dev-开发环境,fat-功能测试环境,uat-用户测试环境, pro-生产环境。

47538ceca735c8a5ec518642600ecab4.png

这似乎好像还有一个问题,服务器如何知道自己是处于什么环境因此还需要一个配置告诉apollo自己的电脑是处于什么环境

,因此开发人员需要在C:\opt\settings 的文件夹下配置server.properties,

4da7d40c8d896e4427270ce4a9667ce1.png

在server.properties中告诉apollo自己在什么环境,

feaeda59223417d2900269047f4427f1.png

792b6f33ea14653b62af84145c54b16c.png

apollo存在四种环境,如果是开发人员那就老老实实配置DEV环境吧

在能获取到远程配置后,需要配置到spring中才能使用

public class AppPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {

@Override

protected void processProperties(ConfigurableListableBeanFactory beanFactoryToProcess, Properties props) throws BeansException {

try {

//从apollo中获取所有配置信息

Config config = ConfigService.getAppConfig(); //config instance is singleton for each namespace and is never null

Set fieldnames = config.getPropertyNames();

//遍历配置信息

for(String fieldname : fieldnames){

String attributeName=fieldname;

String attributeValue = config.getProperty(fieldname,"");

System.out.println("attributeName:"+attributeName + "; attributeValue:" + attributeValue );

props.put(attributeName,attributeValue);

}

} catch (Exception e) {

e.printStackTrace();

logger.info("获取apollo配置失败");

}

super.processProperties(beanFactoryToProcess, props);

}

}

这样就能将得到的所有配置存储到spring容器中了,不过不要忘了配置xml文件

class="com.yudianbank.ApolloConfigCenter.AppPropertyPlaceholderConfigurer">

至于复杂,有多个namespace的情况,还在学习中,有所了解在记录自己的学习

-----------------------------------------------------------------------------------------------------------

来源:CSDN

原文:https://blog.csdn.net/l695914494/article/details/86237150

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐