springboot|springboot 集成 apollo 做配置中心

javaDEMO

本网站记录了最全的各种 JavaDEMO ,保证下载,复制就是可用的,包括基础的, 集合的, Spring 的, MyBatis 的等等各种,助力你从菜鸟到大牛,记得收藏哦~~
https://www.javastudy.cloud

apollo 配置中心总述

apollo 是携程开源一款配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端。 GitHub 地址和文档参考如下:https://github.com/ctripcorp/apollo
其主要组成部分有以下:
MetaServer: 类似于 zookeeper, mq 的 namesrv , 基于 Eureka 提供注册的功能
client: 客户端, 就是我们的应用,需要获取配置的应用
configServer: 提供配置的读取和推送的功能。 client 通过 metaServer 获取到 ConfigServer 的地址,然后通过 configServer 或获取相关的配置
Admin Service: 提供配置的修改和发布的功能,portal 通过 metaServer 获取到 AdminServer 的地址,然后通过 adminServer 对配置进行修改和发布
portal: 可以理解为后台管理页面,如上所述,先通过 metaServer 获取到 AdminServer 地址,然后通过 adminServer 对配置修改和发布

启动 apollo 各个服务端

官方文档提及到,可以通过 docker-compose 来部署, 我建议学习测试可以直接通过 jar 包来启动,到生产环境可使用 k8s 容器编排来部署,后续会有 k8s 相关的 DEMO 出来
用 jar 方式启动参考文档:https://github.com/ctripcorp/apollo/wiki/Quick-Start

下载可启动的 Jar 包

官文下载地址:
https://codeload.github.com/nobodyiam/apollo-build-scripts/zip/master
image.png
下载完如上图所示,有三个地方需要注意,需要先在数据库中导入这两个 SQL 文件,然后在 demo.sh 中修改数据库相关配置

配置数据库

导入 SQL 的方法,可以用 MySQL 命令行 source , 更推荐复制到可视化界面中,如 navicat , datagrip 然后再执行,执行完之后的数据库如下图所示:
image.png
修改 demo.sh 文件对应的数据库配置,注意,为方便启动, 这里改为主机地址,不用 localhost
image.png
同样, 下面的 server url 也要更改成主机 ip 地址
image.png
修改数据库 ApolloConfigDB 中 ServerConfig 表中 eureka.service.url 数据,修改为自己的 ip
image.png

启动服务端程序

考虑到大多数小伙伴都是用 windows,不能执行 sh 文件, 所以这里用 docker 里面的 centos:8 镜像来启动

  1. 启动镜像, 并绑定 8080(ConfigServer 的端口),8070(Portal 的端口),8090(Admin 的端口)
# 启动容器
docker run  -d -it  --name apollo-server  -p 8080:8080 -p 8070:8070 -p 8090:8090 centos:8 bash
# 创建文件夹
docker exec -it apollo-server mkdir -p /var/www
# 把apollo相关的文件拷贝到docker容器中
docker cp apollo-build-scripts-master/ apollo-server:/var/www/apollo
# 进入到容器中
docker exec -it apollo-server bash
# 进入到刚才拷贝的路径
cd /var/www/
# 改变文件所有者为root
chown root apollo -R
# 安装jdk
yum install -y java-1.8.0-openjdk-headless.x86_64
# 运行 demo.sh  启动 apollo 服务端
cd apollo
sh demo.sh start

可能出现的错误

如果遇到 AdminService 健康检查半天通不过,如下:

Admin service failed to start in 120 seconds! Please check ./service/apollo-service.log for more information

可编辑 demo.sh 77 行的 checkServierAlive 方法如下所示:
image.png

配置客户端程序获取配置

测试配置

输入 apollo 的 portal 的地址: http://192.168.1.128:8070/signin 用户名密码是默认的 apollo/admin
image.png
然后创建一个应用,点 submit
image.png
然后输入测试的配置
image.png
然后点发布
image.png
确认发布
image.png

测试获取配置

客户端的程序是基于 https://start.spring.io/生成的最简的 SpringBoot 程序

添加依赖

只需要添加这一个依赖就可以了

compile group: 'com.ctrip.framework.apollo', name: 'apollo-client', version: '1.5.1'

添加配置

在 application.properties 中添加

app.id=javastudy
apollo.meta=http://192.168.1.128:8080

单元测试代码

import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.ConfigService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;


@SpringBootTest
class DemoApplicationTests {
	
	@Test
	void contextLoads() {
		Config appConfig = ConfigService.getAppConfig();
		String property = appConfig.getProperty("test_key", "default_value");
		System.out.println(property);
	}

}

运行单元测试,即可看到相应的结果,由于 Mac 下宿主机 ping 不通 docker 容器, 这里我就不给结果截图了,mac 的同学可以把这个测试写到测试的 controller 中, 然后打成 jar 包, 把 Jar 包放到 docker 容器中,然后宿主机去访问这个 docker 里面的 Java 程序就可以拿到相应的配置了。

DEMO 总评

使用 Apollo 的一个好处在于他可以做分布式配置管理,可以动态修改配置,可以与 SpringBoot 深度集成。在此 DEMO 中虽然没有体现出来,大家可以多开几个 docker:centos 机器为不同的环境来学习测试,加油!

  • 分布式
    60 引用 • 138 回帖 • 3 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    734 引用 • 1295 回帖 • 709 关注
回帖
请输入回帖内容...