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

簡介
Apollo(阿波羅)是一款可靠的分布式配置管理中心,服務端基于Spring Boot和Spring Cloud開發(fā)矛辕,打包后可以直接運行景描,不需要額外安裝Tomcat等應用容器箩朴。Java客戶端不依賴任何框架,能夠運行于所有Java運行時環(huán)境,同時對Spring/Spring Boot環(huán)境也有較好的支持珍特。

快速安裝
最快速的方式基本上就是基于docker-compose方式安裝届谈,調研期間可以隨意銷毀重建,不用擔心改動到服務器的環(huán)境配置挺智。遷移到正式環(huán)境只需要更改配置文件即可祷愉,也不會因為測試機器環(huán)境不同出現(xiàn)新的問題,這也是為什么我喜歡用這種方式的原因赦颇。

官方也推薦了很多方式安裝:Apollo部署文檔

docker-compose方式安裝
本版本v2.3.0基于2024-10-18的最新版安裝,安裝apollo時通常已經(jīng)安裝好mysql了二鳄,所以docker-compose文件中無mysql的安裝文件。

注意事項:

  1. mysql8.0版本使用密碼連接時需要配置該參數(shù)媒怯,因為8.0的密碼插件有改動订讼。 allowPublicKeyRetrieval=true
  2. 根據(jù)官方文檔說明,參數(shù)分割符需要使用&&而不是&
  3. docker中注冊到eureka時的ip和端口時需要是內網(wǎng)ip而不是docker容器中的地址:需要使用如下方式才能生效扇苞,- "JAVA_OPTS=-Deureka.instance.homePageUrl=http://內網(wǎng)IP:8090"欺殿。
    準備工作
  4. mysql腳本下載與導入
    github apollo sql腳本下載 giteeV2.2.0版本sql,可能無法使用

注意事項:sql中創(chuàng)建的庫名為駝峰命名法鳖敷,需要全部改成小寫后再導入脖苏。

  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://內網(wǎng)IP:8080"
- TZ='Asia/Shanghai'
- SERVER_PORT=8080
- EUREKA_INSTANCE_IP_ADDRESS=內網(wǎng)IP
- EUREKA_SERVICE_URL=http://內網(wǎng)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://內網(wǎng)IP:8090"
- TZ='Asia/Shanghai'
- SERVER_PORT=8090
- EUREKA_SERVICE_URL=http://內網(wǎng)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://內網(wǎng)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是統(tǒng)一門戶,也就是apollo的web配置頁面的服務定踱, apollo客戶端可以通過域名訪問Meta Server獲取Admin Service服務列表(IP+Port)棍潘,而后直接通過IP+Port訪問服務,同時在Portal側會做load balance、錯誤重試亦歉。
  2. Admin Service提供配置的修改恤浪、發(fā)布等功能,為Apollo Portal(管理界面)提供接口肴楷。
  3. Config Service提供配置的讀取资锰、推送等功能,服務對象是Apollo客戶端阶祭,同時這個服務也包含了Meta Server和Eureka服務绷杜。官方描述:為了簡化部署,我們實際上會把Config Service濒募、Eureka和Meta Server三個邏輯角色部署在同一個JVM進程中
    詳細內容參考:Apollo總體設計

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

apollo部署架構
Apollo部署架構

部署多環(huán)境
建議參考官方文檔:單機鞭盟,雙環(huán)境

SpringBoot客戶端集成
以下內容適用于Spring Boot Config Data Loader (Spring Boot 2.4+, Apollo Client 1.9.0+ 推薦) + webClient 擴展

  1. 配置maven
    <dependencies>

    <dependency>
    <groupId>com.ctrip.framework.apollo</groupId>
    <artifactId>apollo-client-config-data</artifactId>
    <version>2.3.0</version>
    </dependency>

    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webflux</artifactId>
    </dependency>

    <dependency>
    <groupId>io.projectreactor.netty</groupId>
    <artifactId>reactor-netty-http</artifactId>
    </dependency>
    </dependencies>
  2. 更改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配置加載提到初始化日志系統(tǒng)之前

apollo.bootstrap.eagerLoad.enabled=true
:::color2 注: <font style="color:rgb(233, 105, 0);background-color:rgb(248, 248, 248);">spring.config.import</font> 是從后往前加載配置的, 而 <font style="color:rgb(233, 105, 0);background-color:rgb(248, 248, 248);">apollo.bootstrap.namespaces</font> 是從前往后加載的, 剛好相反。為了保證和原有邏輯一致, 請顛倒 namespaces 的順序

:::

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

app.id=YOUR-APP-ID

  1. apollo-meta-server配置方式
    這里才用在java啟動參數(shù)中加入 -Dapollo.meta=http://config-service-url

如果是運行jar文件瑰剃,需要注意格式是

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

  1. 跳過Apollo meta Server的服務發(fā)現(xiàn)齿诉,適用于config Service部署在公有云上。
    -Dapollo.config-service=http://config-service-url:port
  2. 通過Java System Property配置ENV (其他方式)
    ? 可以通過Java的System Property 設置ENV 來指定環(huán)境
    ? 在Java程序啟動腳本中晌姚,可以指定
    java -Denv=YOUR-ENVIRONMENT -jar xxx.jar

作者會不定期分享技術干貨粤剧,歡迎關注公眾號:freethinker_sun

本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布!

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末挥唠,一起剝皮案震驚了整個濱河市抵恋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宝磨,老刑警劉巖弧关,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異唤锉,居然都是意外死亡世囊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門窿祥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來株憾,“玉大人,你說我怎么就攤上這事晒衩∴拖梗” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵浸遗,是天一觀的道長猫胁。 經(jīng)常有香客問我,道長跛锌,這世上最難降的妖魔是什么弃秆? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任届惋,我火速辦了婚禮,結果婚禮上菠赚,老公的妹妹穿的比我還像新娘脑豹。我一直安慰自己,他們只是感情好衡查,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布瘩欺。 她就那樣靜靜地躺著,像睡著了一般拌牲。 火紅的嫁衣襯著肌膚如雪俱饿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天塌忽,我揣著相機與錄音拍埠,去河邊找鬼。 笑死土居,一個胖子當著我的面吹牛枣购,可吹牛的內容都是我干的。 我是一名探鬼主播擦耀,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼棉圈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了眷蜓?” 一聲冷哼從身側響起分瘾,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎账磺,沒想到半個月后芹敌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體痊远,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡垮抗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了碧聪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冒版。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖逞姿,靈堂內的尸體忽然破棺而出辞嗡,到底是詐尸還是另有隱情,我是刑警寧澤滞造,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布续室,位于F島的核電站,受9級特大地震影響谒养,放射性物質發(fā)生泄漏挺狰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望丰泊。 院中可真熱鬧薯定,春花似錦、人聲如沸瞳购。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽学赛。三九已至年堆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盏浇,已是汗流浹背嘀韧。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留缠捌,地道東北人锄贷。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像曼月,于是被迫代替她去往敵國和親谊却。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內容