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

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

这是需要添加的依赖。

<!--apollo-->
      <dependency>
        <groupId>com.ctrip.framework.apollo</groupId>
        <artifactId>apollo-client</artifactId>
        <version>1.1.0</version>
      </dependency>
      <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>19.0</version>
      </dependency>

图为apollo的页面详情;

java对接阿波罗 java阿波罗是什么_测试环境

 

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

java对接阿波罗 java阿波罗是什么_测试环境_02

 

首先介绍app.properties

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

java对接阿波罗 java阿波罗是什么_测试环境_03

           

java对接阿波罗 java阿波罗是什么_配置信息_04

 

java对接阿波罗 java阿波罗是什么_java_05

       因为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-生产环境。

java对接阿波罗 java阿波罗是什么_配置信息_06

 

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

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

java对接阿波罗 java阿波罗是什么_配置信息_07

 

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

java对接阿波罗 java阿波罗是什么_java_08

java对接阿波罗 java阿波罗是什么_java对接阿波罗_09

 

 

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<String> 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文件

<!-- 这个是最简单的配置形式,一般应用用这种形式就可以了,用来指示Apollo注入application namespace的配置到Spring环境中 -->
    <!--<apollo:config />-->
    <apollo:config order="11" />
    <bean id="appPropertyPlaceholderConfigurer"
          class="com.yudianbank.ApolloConfigCenter.AppPropertyPlaceholderConfigurer"></bean>


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