1.简介

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

服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。

Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持

 

2.环境要求

  • Java: 1.7+

3.Apollo后台管理平台使用

 

3.1 演示环境(Demo)

springboot开发snmp客户端 springboot soap客户端_SpringBoot

 

 

3.2 项目配置

 

1、选择需要配置的环境

2、把项目的application*.properties  属性复制一份放到‘文本’进行发布,步骤如下图

springboot开发snmp客户端 springboot soap客户端_SpringBoot_02

 

注意:

  1. 配置文件发布之后,服务重启之后才会生效。
  2. 如果发布的属性存在相同的key 则会发布失败同时还不会保存你修改了的配置。
  3.  如果是application.yml可以使用YamlPropertiesFactoryBean.getObject转成properties格式

4.系统配置说明

Apollo客户端依赖于AppId,Apollo Meta Server等环境信息来工作,所以请确保阅读下面的说明并且做正确的配置:

4.1 客户端环境配置

4.1.1 文件server.properties存放路径

 

  1. 对于Mac/Linux,文件位置为/opt/settings/server.properties
  2. 对于Windows,文件位置为C:\opt\settings\server.properties

 

4.1.2  server.properties文件内容

springboot开发snmp客户端 springboot soap客户端_SpringBoot_03

 

apollo.meta:   表示从改apollo 服务端拉取配置的信息

env :          表示从apollo 服务端某个环境环境拉取配置

apollo.cacheDir:表示Apollo客户端会把从服务端获取到的配置在本地文件系统缓存一份,用于在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置,不影响应用正常运行。

      本地缓存路径默认位于以下路径,所以请确保/opt/data或C:\opt\data\目录存在,且应用有读写权限。

 

Mac/Linux: /opt/data/{appId}/config-cache

Windows: C:\opt\data\{appId}\config-cache

 

4.2 系统配置

4.2.1  Maven依赖

 

<dependency>

        <groupId>com.ctrip.framework.apollo</groupId>

        <artifactId>apollo-client</artifactId>

        <version>1.2.0</version>

 </dependency>

需要1.2.0及其以上

4.2.2  启动类标签配置

@EnableApolloConfig

需要在application启动类上加上此注解才会生效。

 

4.2.3  Apollo读取AppId

AppId:应用的身份信息,每个应用必须唯一,是从服务端获取配置的一个重要信息

AppId配置

项目启动apollo会读取appId,去远端拉最新配置文件。AppId可以通过集中方式配置;

4.2.3.1可以通过Java的System Property 指定appId

例如:

springboot开发snmp客户端 springboot soap客户端_springboot开发snmp客户端_04

4.2.3.2 Spring Boot application.properties指定appId

app.id=YOUR-APP-ID

该配置方式不适用于多个war包部署在同一个tomcat的使用场景

4.2.3.3 放在resource目录下的META-INF的app.properties

必须放在META-INF目录下,文件名为app.properties
例如:

springboot开发snmp客户端 springboot soap客户端_SpringBoot_05

4.2.4  日志配置

4.2.4.1项目日志配置

由于日志配置的加载顺序大于application.yml的配置,所以在读取apollo配置之前日志加载就完成了,需要把apollo的加载顺序提到日志之前就需要如下配置:

# will inject 'application' namespace in bootstrap phase
apollo.bootstrap.enabled = true
# put apollo initialization before logging system initialization
apollo.bootstrap.eagerLoad.enabled=true

springboot开发snmp客户端 springboot soap客户端_tomcat_06

Apollo 1.2.0及其以上的版本才支持该配置。

 

4.2.4.2 项目日志路径配置

 

  1. 项目日志文件路径配置

 

logback.loghome = logPath

 

日志文件

springboot开发snmp客户端 springboot soap客户端_tomcat_07

 

  1. SpringBoot 内置tomcat的日志配置

 

server.tomcat.uri-encoding = UTF-8

server.tomcat.max-threads = 1000

server.tomcat.max-connections = 1500

server.tomcat.accesslog.enabled = true

server.tomcat.accesslog.directory = /volume_logs

server.tomcat.accesslog.file-date-format = .yyyyMMdd

server.tomcat.accesslog.prefix = api-access.log

server.tomcat.accesslog.suffix =

server.tomcat.accesslog.pattern = [%{yyyy-MM-dd HH:mm:ss.SSS}t] %h %l %u "%r" %s %b

server.tomcat.basedir = /volume_logs

 

5获取配置属性

5.1通过Spring自带的@Value注解获取

 

5.2通ConfigService.getAppConfig()

springboot开发snmp客户端 springboot soap客户端_apollo_08

6 添加公用namespace

6.1 在项目A选择添加namespace

springboot开发snmp客户端 springboot soap客户端_springboot开发snmp客户端_09

6.2 创建公用的namespace

 

springboot开发snmp客户端 springboot soap客户端_tomcat_10

springboot开发snmp客户端 springboot soap客户端_tomcat_11

6.3 在项目B 使用项目A 创建的公用namespace

springboot开发snmp客户端 springboot soap客户端_apollo_12

需要在application.yml文件下配置

apollo:

  bootstrap:

    enabled: true

    namespaces: application,testApplication

    eagerLoad:

      enabled: true

如果项目B引用了项目A的公用namespace ,若存在相同的key 项目B 则会覆盖项目A  key的value。

 

附录

 

Apollo Java客户端使用指南:

 

https://github.com/ctripcorp/apollo/wiki/Java%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97#3213-spring-boot%E9%9B%86%E6%88%90%E6%96%B9%E5%BC%8F%E6%8E%A8%E8%8D%90