SpringBoot集成Apollo配置中心(快速版)

459 阅读4分钟

简介 Apollo(阿波罗)是一款可靠的分布式配置管理中心,服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。

快速安装 最快速的方式基本上就是基于docker-compose方式安装,调研期间可以随意销毁重建,不用担心改动到服务器的环境配置。迁移到正式环境只需要更改配置文件即可,也不会因为测试机器环境不同出现新的问题,这也是为什么我喜欢用这种方式的原因。

官方也推荐了很多方式安装:Apollo部署文档

docker-compose方式安装 本版本v2.3.0基于2024-10-18的最新版安装,安装apollo时通常已经安装好mysql了,所以docker-compose文件中无mysql的安装文件。

注意事项:

  1. mysql8.0版本使用密码连接时需要配置该参数,因为8.0的密码插件有改动。 allowPublicKeyRetrieval=true
  2. 根据官方文档说明,参数分割符需要使用&&而不是&
  3. docker中注册到eureka时的ip和端口时需要是内网ip而不是docker容器中的地址:需要使用如下方式才能生效,- "JAVA_OPTS=-Deureka.instance.homePageUrl=http://内网IP:8090"。 准备工作
  4. mysql脚本下载与导入 github apollo sql脚本下载 giteeV2.2.0版本sql,可能无法使用

注意事项:sql中创建的库名为驼峰命名法,需要全部改成小写后再导入。

  1. docker-compose文件 version: "3"

services: apollo-configservice: container_name: apollo-configservice image: apolloconfig/apollo-configservice:2.3.0 restart: always ports: - "8080:8080" volumes: - "/data/docker_data/apollo/logs:/opt/logs" environment: - "JAVA_OPTS=-Deureka.instance.homePageUrl=http://内网IP:8080" - TZ='Asia/Shanghai' - SERVER_PORT=8080 - EUREKA_INSTANCE_IP_ADDRESS=内网IP - EUREKA_SERVICE_URL=http://内网IP:8080/eureka/ - SPRING_DATASOURCE_URL=jdbc:mysql://mysqlip:3306/apolloconfigdb?useUnicode=true&&characterEncoding=utf-8&&serverTimezone=Asia/Shanghai&&useSSL=false&&allowPublicKeyRetrieval=true - SPRING_DATASOURCE_USERNAME=mysqlusername - SPRING_DATASOURCE_PASSWORD=mysqlpassword

apollo-adminservice: container_name: apollo-adminservice image: apolloconfig/apollo-adminservice:2.3.0 restart: always ports: - "8090:8090" depends_on: - apollo-configservice volumes: - "/data/docker_data/apollo/logs:/opt/logs" environment: - "JAVA_OPTS=-Deureka.instance.homePageUrl=http://内网IP:8090" - TZ='Asia/Shanghai' - SERVER_PORT=8090 - EUREKA_SERVICE_URL=http://内网IP:8080/eureka/ - SPRING_DATASOURCE_URL=jdbc:mysql://mysqlip:3306/apolloconfigdb?useUnicode=true&&characterEncoding=utf-8&&serverTimezone=Asia/Shanghai&&useSSL=false&&allowPublicKeyRetrieval=true - SPRING_DATASOURCE_USERNAME=mysqlusername - SPRING_DATASOURCE_PASSWORD=mysqlpassword apollo-portal: container_name: apollo-portal image: apolloconfig/apollo-portal:2.3.0 restart: always ports: - "8070:8070" depends_on: - apollo-adminservice volumes: - "/data/docker_data/apollo/logs:/opt/logs" environment: - "JAVA_OPTS=-Ddev_meta=http://内网IP:8080" - TZ='Asia/Shanghai' - SERVER_PORT=8070 - APOLLO_PORTAL_ENVS=dev,prod #配置env - SPRING_DATASOURCE_URL=jdbc:mysql://mysqlip:3306/apolloportaldb?useUnicode=true&&characterEncoding=utf-8&&serverTimezone=Asia/Shanghai&&useSSL=false&&allowPublicKeyRetrieval=true - SPRING_DATASOURCE_USERNAME=mysqlusername - SPRING_DATASOURCE_PASSWORD=mysqlpassword 访问apollo客户端:http://ip:8070 默认账户密码:

用户名:apollo

密码:admin

apollo各组件快速介绍

  1. Portal是统一门户,也就是apollo的web配置页面的服务, apollo客户端可以通过域名访问Meta Server获取Admin Service服务列表(IP+Port),而后直接通过IP+Port访问服务,同时在Portal侧会做load balance、错误重试。
  2. Admin Service提供配置的修改、发布等功能,为Apollo Portal(管理界面)提供接口。
  3. Config Service提供配置的读取、推送等功能,服务对象是Apollo客户端,同时这个服务也包含了Meta Server和Eureka服务。官方描述:为了简化部署,我们实际上会把Config Service、Eureka和Meta Server三个逻辑角色部署在同一个JVM进程中 详细内容参考:Apollo总体设计

apollo项目使用案例 Apollo使用教程

apollo部署架构 Apollo部署架构

部署多环境 建议参考官方文档:单机,双环境

SpringBoot客户端集成 以下内容适用于Spring Boot Config Data Loader (Spring Boot 2.4+, Apollo Client 1.9.0+ 推荐) + webClient 扩展

  1. 配置maven com.ctrip.framework.apollo apollo-client-config-data 2.3.0 org.springframework spring-webflux io.projectreactor.netty reactor-netty-http
1. 更改SpringBoot项目中的配置文件application.properties/bootstrap.properties app.id=YOUR-APP-ID # 注入非默认application namespace或多个namespace的配置 apollo.client.extension.enabled=true spring.config.import=apollo://namespace3, apollo://namespace2, apollo://namespace1 # 将Apollo配置加载提到初始化日志系统之前 apollo.bootstrap.eagerLoad.enabled=true :::color2 注: spring.config.import 是从后往前加载配置的, 而 apollo.bootstrap.namespaces 是从前往后加载的, 刚好相反。为了保证和原有逻辑一致, 请颠倒 namespaces 的顺序

:::

  1. AppId的配置方式 这里采用Spring Boot的application.properties文件配置

app.id=YOUR-APP-ID

  1. apollo-meta-server配置方式 这里才用在java启动参数中加入 -Dapollo.meta=http://config-service-url

如果是运行jar文件,需要注意格式是

java -Dapollo.meta=http://config-service-url -jar xxx.jar

  1. 跳过Apollo meta Server的服务发现,适用于config Service部署在公有云上。 -Dapollo.config-service=http://config-service-url:port
  2. 通过Java System Property配置ENV (其他方式) • 可以通过Java的System Property 设置ENV 来指定环境 • 在Java程序启动脚本中,可以指定 java -Denv=YOUR-ENVIRONMENT -jar xxx.jar

作者会不定期分享技术干货,欢迎关注公众号:freethinker_sun

本文由博客一文多发平台 OpenWrite 发布!