Springboot/SpringCloud项目使用Apollo配置中心获取配置信息

背景介绍:当前项目为springcloud微服务,整个微服务框架中分布式系统服务和集群的数量相当多,每一个服务都有着自己的配置,之前所有服务的配置信息都使用springcloud配置中心,启动服务时会从配置中心拉取对应服务的配置文件获取配置信息,现在需要将所有配置信息迁移到Apollo配置中心,由Apollo管理配置信息。
一、配置Apollo配置中心并为应用添加配置信息
1、部署和启动Apollo配置中心(参考以下链接快速在本地环境部署、启动Apollo配置中心)
https://github.com/ctripcorp/apollo/wiki/Quick-Start
2、打开 http://localhost:8070 进入配置中心
Springboot/SpringCloud项目使用Apollo配置中心获取配置信息
3、创建应用
Springboot/SpringCloud项目使用Apollo配置中心获取配置信息
注意:
4、创建集群
Springboot/SpringCloud项目使用Apollo配置中心获取配置信息
5、创建namespace,一个namespace对应应用的一个配置文件,一个应用可以通过创建多个namespace来添加多个配置文件。建议大家创建namespace时都只选择private类型(properties格式),不要滥用公共的namespace(仅适用于大规模公用的基础组件配置)
Springboot/SpringCloud项目使用Apollo配置中心获取配置信息
这个可以选择配置文件的格式,比如常见的properties和yml。
6、打开第二步配置中心页面上的应用,查看、增加、修改和删除应用配置信息
Springboot/SpringCloud项目使用Apollo配置中心获取配置信息
在这个页面可以添加、修改和删除具体的配置信息。
注意,properties和yml文件添加配置的方式不太一样。
二、配置Apollo客户端,使用客户端从Apollo配置中心获取配置信息
1、SpringCloud应用添加Apollo客户端
(1)在application.properties文件添加以下配置信息

    app.id = apollodemo     //应用的名称
    apollo.bootstrap.enabled = true
    apollo.bootstrap.eagerLoad.enabled = true
    apollo.bootstrap.namespaces = apollodemo
    apollo.cluster = sit    //指定集群名称,否则默认采用default集群
    apollo.namespace = apollodemo
	apollo.private.key = classpath:\\apollo_private_key   //加***所在位置
    env=SIT             //指定环境
    apollo.meta=http://aaa.abc.sit     //指定Apollo配置中心路径

(2)本地配置缓存路径

Mac/Linux: /opt/data/
Windows: C:\opt\data\

Apollo客户端会把从服务端获取到的配置在本地文件系统缓存一份,用于在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置,不影响应用正常运行。本地缓存路径默认位于以下路径(可通过JVM参数-Dapollo.cacheDir指定),所以请确保/opt/data或C:\opt\data\目录存在,且应用有读写权限。
(3)添加Apollo客户端的maven依赖,一般的公司都会对其封装,这里借用一下携程的。

		<dependency>
            <groupId>com.ctrip.framework.apollo</groupId>
            <artifactId>apollo-client</artifactId>
            <version>1.0.0</version>
        </dependency>

2、springcloud应用从Apollo配置中心获取配置信息(两种方式)
方式一:结合spring的方式
(1)基于java的配置,在需要获取配置的类上使用@EnableApolloConfig注解,即可获取配置信息。

@Configuration
@EnableApolloConfig
public class ApolloConfig {
    @Value("${test.name}")
    private String username;
    @Value("${test.password}")
    private String password;
}

(2)基于XML的配置,添加apollo的schema约束。

<?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:apollo="http://www.ctrip.com/schema/apollo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.ctrip.com/schema/apollo http://www.ctrip.com/schema/apollo.xsd">
  <!-- 用来指示Apollo注入application namespace的配置到Spring环境中 -->
 <apollo:config/>
</beans>

方式二:直接调用Apollo的api

Config config = ConfigService.getAppConfig(); //config instance is singleton for each namespace and is never null
String key = "key1";
String defaultValue = "value1";
String value = config.getProperty(key, defaultValue);

说明:key为所要获取配置信息的键,value为对应配置信息的值,如果指定的键没有对应的值,则使用指定的默认值defaultValue作为key的值。