博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot集成Apollo配置中心
阅读量:6721 次
发布时间:2019-06-25

本文共 5739 字,大约阅读时间需要 19 分钟。

准备工作

本文假设读者已经在本地部署Apollo配置中心,如还未部署可参考之前的文章 文章将引导在Docker中运行Apollo配置中心。在开始使用之前咱们先了解一下Apollo的的一些概念:

应用ID(AppId)

AppId是应用的身份信息,是从服务端获取配置的一个重要信息。Apollo支持三种设置AppId的方式,按照优先级从高到低分别为:

  1. 可以通过Java的System Property apollo.meta来指定
  2. System Property(系统属性)
  3. Spring Boot application.properties(SpringBoot配置)
  4. app.properties (需放置在classpath:/META-INF/目录下)

为方便演示,本文采用第3种方案来设置AppId

Apollo Meta Server

Apollo支持应用在不同的环境有不同的配置,Apollo Meta Server可以理解为包含特定环境配置信息的服务,比如Apollo Meta Server可以运行在dev环境下,你的应用同样也以dev环境运行那么获取到的配置就是dev环境的配置,稍后我们再来讲解环境Apollo Meta Server的使用。从1.0.0版本开始支持以下方式配置apollo meta server信息,按照优先级从高到低分别为:

  1. 使用系统属性 apollo.meta
    • 可以通过Java的System Property apollo.meta来指定定
    • 在Java程序启动脚本中,可以指定-Dapollo.meta=" Apollo Meta Server URL"
    • 也可以通过程序指定,如System.setProperty
  2. 通过Spring Boot的配置文件
    • 可以在Spring Boot的application.properties或bootstrap.properties中指定apollo.meta的值
  3. 通过操作系统的System EnvironmentAPOLLO_META
    • 需要注意大小写敏感的
  4. 通过server.properties配置文件
    • 可以在server.properties配置文件中指定apollo.meta=http://config-service-url
    • 对于Mac/Linux,文件位置为/opt/settings/server.properties
    • 对于Windows,文件位置为C:\opt\settings\server.properties
  5. 通过app.properties配置文件
  6. 通过Java system property ${env}_meta
  7. 通过操作系统的System Environment${ENV}_META(1.2.0版本开始支持)
  8. 通过apollo-env.properties文件
    • 用户也可以创建一个apollo-env.properties,放在程序的classpath下,或者放在spring boot应用的config目录下

以上配置方式详细信息可查看 来了解详细信息。

环境

搞清楚AppIdApollo Meta Server这两个概念后,可以再进一步了解环境的概念。我们都知道SpringBoot中可以通过spring.profiles.active来配置应用的配置环境,通过指定不同的环境来使应用运行时产生不同的行为,Apollo中的环境与SpringBoot的中的环境类似,你可以将Apollo部署在dev环境供开发人员测试,在dev环境部署Apollo后,然后将Apollo的环境标记设置为dev这样应用在dev环境运行并且获取到的配置信息是相对于dev环境中的配置。环境可以通过以下3种方式的任意一个配置:

  1. 可以通过Java的System Property env来指定环境
    • 可通过参数-Denv=dev
  2. 通过操作系统的ENV环境变量指定
    • 大小写敏感
  3. 通过配置文件
    • 可以在server.properties配置文件中指定env=YOUR-ENVIRONMENT

Apollo中还支持集群Namespace相关的概念这里就不细说了,本文中要使用Apollo配置中心了解AppIdApollo Meta Server环境就够了,详细可查看

使用Apollo配置中心

可以 创建一个SpringBoot工程,这里我们创建一个ApolloSample的工程,并引入spring-boot-starter-web依赖,创建完后打开工程,然后再来演示Apollo的使用。本文中使用使用的工程及docker-compose.yaml文件已经打包上传到了 Github, 可访问 地址下载本地进行测试。

git clone git@github.com:yjwfn/ApolloSample.git复制代码

配置ApolloSample工程

Maven依赖

首先添加Apollo客户端的Maven依赖:

com.ctrip.framework.apollo
apollo-client
1.1.0
复制代码

ApolloSample应用配置

已经讲解过如何在Dockre中部署,这里就不在细说了,我们这里直接在ApolloSample工程目录下运行docker-compose up -d apollo-portal把Apollo的服务启动起来,这里要等待大概1分钟,待服务完全启动后后打开 访问管理控制台添加应用,应用ID和名称分别设置为20181228001ApolloSample添加应用完成后,先发布一下应用不然启动ApolloSample工程的时候会找不到配置文件:

然后回到工程项目中在application.properties中添加以下配置:

app.id=20181228001apollo.meta=http://apollo-configservice-dev:8080apollo.bootstrap.enabled = true复制代码

添加测试接口

在工程里面添加个RestControllre用于获取指定的的配置:

package cn.rcntech.ApolloSample.controller;import com.ctrip.framework.apollo.ConfigService;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping(path = "/configurations")public class ApolloConfigurationController {    @RequestMapping(path = "/{key}")    public String getConfigForKey(@PathVariable("key") String key){        return ConfigService.getAppConfig().getProperty(key, "undefined");    }}复制代码

发布到Docker

由于Apollo是在Docker中运行的,为了方便测试同样也将ApolloSample打包发布到Docker里面运行。

制作Docker镜像

由于使用的Docker所以需要安装下Docker的 :

com.spotify
dockerfile-maven-plugin
v1.4.9
default
build
push
apollo/apollo-sample
${project.version}
${project.build.finalName}.jar
复制代码

然后再添加一个Dockerfile在工程的根目录下:

FROM openjdk:8-jreARG JAR_FILERUN mkdir /apollo-sampleADD target/$JAR_FILE /apollo-sample/app.jarENTRYPOINT ["java", "-jar", "/apollo-sample/app.jar"]复制代码

打开终端进入到工程目录下执行命令,将工程打包成Docker镜像:

./mvnw package -DskipTests复制代码

启动ApolloSample

打包完成后apollo/apollo-sample镜像就制作完成了,可以使用docker images查看镜像。注意我们的Apollo服务也是运行在Docker中的,工程容器需要能够访问Apollo Meta Server推荐使用dockere-compose部署:

vresion: 3srevices: ... #其他服务 apollo-sample-dev:  image: apollo/apollo-sample:0.0.1-SNAPSHOT  environment:   ENV: dev  ports:    - 8090:8080  depends_on:     - apollo-configservice-dev复制代码

使用docker-compose启动时需要docker-compose.yaml文件,本文使用的docker-compose.yaml文件已经包含在git仓库中了,只需要在仓库根目录运行docker-compose up -d即可,运行命令后查看是否启动成功可通过docker logs <容器名称>查看启动日志,启动成功后部分日志如下:

2018-12-29 00:50:34.092  INFO 1 --- [           main] c.c.f.f.i.p.DefaultApplicationProvider   : App ID is set to 20181228001 by app.id property from System Property2018-12-29 00:50:34.099  INFO 1 --- [           main] c.c.f.f.i.p.DefaultServerProvider        : Environment is set to [dev] by OS env variable 'ENV'.2018-12-29 00:50:34.184  INFO 1 --- [           main] c.c.f.a.i.DefaultMetaServerProvider      : Located meta services from apollo.meta configuration: http://apollo-configservice-dev:8080!2018-12-29 00:50:34.198  INFO 1 --- [           main] c.c.f.apollo.core.MetaDomainConsts       : Located meta server address http://apollo-configservice-dev:8080 for env DEV from com.ctrip.framework.apollo.internals.DefaultMetaServerProvider2018-12-29 00:50:34.413  INFO 1 --- [           main] c.r.A.ApolloSampleApplication            : Starting ApolloSampleApplication v0.0.1-SNAPSHOT on 937733c90b79 with PID 1 (/apollo-sample/app.jar started by root in /)2复制代码

回到管理控制中心可以查看已注册的实例:

测试配置

启动ApolloSample工程后我们可以访问 查看welcome中的值,因为我们没有没配置所以默认会输出undefined

现在往Apollo配置中心添加键为welcome的配置:

点击发布然后再获取下welcome的值可以看到值已经实时更新了:

现在Apllo配置中心已经集并测试成功,测试就暂时测试到这里后面再来探索更多的高级成功。

总结

因为官方文档很全,这次测试SpringBoot集成总的来说挺顺利,后续会再深入了解些Apollo配置中心的知识,比如多环境多集群Namespace等知识。

转载地址:http://ryjmo.baihongyu.com/

你可能感兴趣的文章
C# 简介
查看>>
java 两个数交换问题
查看>>
css核心
查看>>
redhat6.0安装步骤
查看>>
央视广告招标京东成黑马 茅台是标王
查看>>
CnetOS 6.6 rsync 的服务端和客户端配置
查看>>
mysql双主同步配置
查看>>
【拾贝】版本控制-git 建立Team项目
查看>>
和为S的连续正数序列
查看>>
孩子们的游戏(圆圈中最后剩下的数)
查看>>
MySQL的AB复制
查看>>
Mysql调优:
查看>>
批量修改root密码#shell脚本
查看>>
Linux命令学习记录(四)
查看>>
Oracle日常维护操作笔记(一)
查看>>
网管必懂的几个概念
查看>>
puppet 部署
查看>>
ISCSI文件存储
查看>>
求助:关于windows飞信机器人的问题
查看>>
我的友情链接
查看>>