摘要:比如使用的時(shí)候指定使用哪個(gè)環(huán)境的配置在微服務(wù)架構(gòu)下,服務(wù)的數(shù)量會(huì)比之前的單體應(yīng)用多,部署的節(jié)點(diǎn)數(shù)量也會(huì)很多。今天主要是講下在中如何對(duì)接進(jìn)行配置管理。
問(wèn)題背景
在實(shí)際工作中,我們的開(kāi)發(fā)環(huán)境,測(cè)試環(huán)境,生產(chǎn)環(huán)境對(duì)應(yīng)的 Mysql 數(shù)據(jù)庫(kù),Redis 這些信息都不一樣,每個(gè)環(huán)境都有對(duì)應(yīng)的一套配置,在 Spring Boot 中我們通常會(huì)編寫(xiě)多個(gè)配置文件,也就是每個(gè)環(huán)境一個(gè)配置文件。
比如:
application-dev.properties
spring.datasource.druid.url=jdbc:mysql://192.168.0.111:3306/xxx
application-test.properties
spring.datasource.druid.url=jdbc:mysql://192.168.0.112:4306/xxx
使用的時(shí)候指定使用哪個(gè)環(huán)境的配置:
java -jar xxx.jar --spring.profiles.active=test
在微服務(wù)架構(gòu)下,服務(wù)的數(shù)量會(huì)比之前的單體應(yīng)用多,部署的節(jié)點(diǎn)數(shù)量也會(huì)很多。當(dāng)某些配置發(fā)生修改的時(shí)候,我們需要重新修改項(xiàng)目中的代碼,然后重新發(fā)布。當(dāng)然也可以直接通過(guò)上面的 --xxx 方式進(jìn)行參數(shù)的傳遞,這種方式不好的地方在于項(xiàng)目中的配置跟線(xiàn)上發(fā)布的對(duì)應(yīng)不上。
最簡(jiǎn)單的一個(gè)示例,直接修改項(xiàng)目中的配置,然后重新編譯,發(fā)布,你改一次配置至少得10來(lái)分鐘。對(duì)于某些活動(dòng)的應(yīng)用配置,可能在某個(gè)時(shí)候突然需要進(jìn)行緊急修改,這樣一來(lái)就被時(shí)間耽誤了事情。
最好的辦法是使用配置中心來(lái)集中管理配置,可以做到配置修改立馬更新到客戶(hù)端,只要1秒鐘就可以搞定配置的修改,優(yōu)勢(shì)很明顯。
框架推薦今天給大家介紹一款在社區(qū)非常火的配置中心:Apollo
Github : https://github.com/ctripcorp/...
Apollo(阿波羅)是攜程框架部門(mén)研發(fā)的分布式配置中心,能夠集中化管理應(yīng)用不同環(huán)境、不同集群的配置,配置修改后能夠?qū)崟r(shí)推送到應(yīng)用端,并且具備規(guī)范的權(quán)限、流程治理等特性,適用于微服務(wù)配置管理場(chǎng)景。
對(duì)Apollo本身就不做過(guò)多細(xì)致的介紹,感興趣的朋友可以去 Github 詳細(xì)了解。
今天主要是講下在 Spring Boot 中如何對(duì)接 Apollo 進(jìn)行配置管理。
首先你得部署好了Apollo,Apollo提供了一個(gè)快速體驗(yàn)包,大家可以下載下來(lái)直接啟動(dòng),具體操作請(qǐng)參考 Github 。不過(guò)官方本身也為我們準(zhǔn)備了一個(gè)演示的地址,我們可以直接用來(lái)學(xué)習(xí):http://106.12.25.204:8070 賬號(hào)/密碼:apollo/admin
Spring Boot中使用進(jìn)入演示地址,找一個(gè)應(yīng)用點(diǎn)進(jìn)去:
我們基于默認(rèn)的集群的application空間來(lái)做演示
準(zhǔn)備一個(gè) Spring Boot 項(xiàng)目,加入 Apollo Client 的 Maven 依賴(lài):
com.ctrip.framework.apollo apollo-client 1.1.0
然后配置Apollo的信息,配置放在application.properties中:
app.id=apollo-demo apollo.meta=http://106.12.25.204:8080 apollo.bootstrap.enabled=true apollo.bootstrap.namespaces=application
app.id:身份信息,就是應(yīng)用名稱(chēng),跟我們第一張圖點(diǎn)進(jìn)去的一樣
apollo.meta:Meta Server(Config Service)
apollo.bootstrap.enabled:項(xiàng)目啟動(dòng)的bootstrap階段,向Spring容器注入配置信息
apollo.bootstrap.namespaces:注入命名空間
環(huán)境我們直接在main方法中指定,演示方便:
@SpringBootApplication public class App { public static void main(String[] args) { // 指定環(huán)境(開(kāi)發(fā)演示用,不能用于生產(chǎn)環(huán)境)) System.setProperty("env", "DEV"); SpringApplication.run(App.class, args); } }
我們可以準(zhǔn)備一個(gè)接口進(jìn)行測(cè)試配置的讀取,配置讀取的方式有很多種,我們就用最常用的@Value
@RestController public class DemoController { @Value("${test.username}") private String name; @GetMapping("/callHello") public String callHello() { return name; } }
當(dāng)配置修改之后,這邊獲取的值也會(huì)實(shí)時(shí)修改,大家可以自己測(cè)試下。本文只是簡(jiǎn)單的帶大家體驗(yàn)了一下如何使用,還有很多東西沒(méi)有講解,如果大家想學(xué)習(xí)的話(huà)可以去我的網(wǎng)站進(jìn)行學(xué)習(xí),我錄制了一套課程。
課程地址:http://cxytiandi.com/course/23 課程大綱課程介紹
概念介紹
架構(gòu)設(shè)計(jì)介紹
Apollo快速部署
后臺(tái)介紹
Apollo整合Spring Boot
配置監(jiān)聽(tīng)
存儲(chǔ)Json數(shù)據(jù)
擴(kuò)展使用
生產(chǎn)環(huán)境部署講解
歡迎加入我的知識(shí)星球,一起交流技術(shù),免費(fèi)學(xué)習(xí)猿天地的所有課程,包括這套Apollo目前已經(jīng)有20+課程了,后續(xù)還會(huì)更新下去。
配置中心Apollo實(shí)戰(zhàn)
實(shí)戰(zhàn)分庫(kù)分表中間件Sharding-JDBC
實(shí)戰(zhàn)分布式任務(wù)調(diào)度框架Elastic Job
微服務(wù)架構(gòu)實(shí)戰(zhàn)課程-送源碼
API加密框架原理解密
Spring Boot中的Mongodb多數(shù)據(jù)源擴(kuò)展
Spring Boot + Vue前后端分離實(shí)戰(zhàn)
Zookeeper-請(qǐng)了解下
Spring Boot從入門(mén)到精通課程
實(shí)戰(zhàn)Java爬蟲(chóng)課程
實(shí)戰(zhàn)Mongodb課程
等等..................
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/73890.html
摘要:我們是不是很好奇配置中心如何做到實(shí)時(shí)更新并且通知到客戶(hù)端的這也是一個(gè)面試中經(jīng)常會(huì)問(wèn)到的題目??蛻?hù)端得到狀態(tài)碼是并且會(huì)根據(jù)立即去服務(wù)端拉取最新的配置。引言 記得我們那時(shí)候剛開(kāi)始學(xué)習(xí)Java的時(shí)候都只是一個(gè)單體項(xiàng)目,項(xiàng)目里面的配置基本都是寫(xiě)在項(xiàng)目里面的properties文件中,比如數(shù)據(jù)庫(kù)配置啥的,各種邏輯開(kāi)關(guān),一旦這些配置修改了,還需要重啟項(xiàng)目這修改才會(huì)生效。隨著各種微服務(wù)的誕生,服務(wù)的...
摘要:我們是不是很好奇配置中心如何做到實(shí)時(shí)更新并且通知到客戶(hù)端的這也是一個(gè)面試中經(jīng)常會(huì)問(wèn)到的題目。雖然是攜程開(kāi)源的,但是攜程內(nèi)部也不用它??蛻?hù)端得到狀態(tài)碼是并且會(huì)根據(jù)立即去服務(wù)端拉取最新的配置。通過(guò)定時(shí)任務(wù)的補(bǔ)充,可以讓配置達(dá)到最終的一致性。 引言記得我們那時(shí)候剛開(kāi)始學(xué)習(xí)Java的時(shí)候都只是一個(gè)單體項(xiàng)目,項(xiàng)目里面的配...
摘要:宋體自年被開(kāi)源以來(lái),很快便成為了容器編排領(lǐng)域的標(biāo)準(zhǔn)。宋體年月,樂(lè)心醫(yī)療的第一個(gè)生產(chǎn)用集群正式上線(xiàn)。所以于年推出后,樂(lè)心醫(yī)療的運(yùn)維團(tuán)隊(duì)在開(kāi)會(huì)討論之后一致決定盡快遷移到。Kubernetes 自 2014 年被 Google 開(kāi)源以來(lái),很快便成為了容器編排領(lǐng)域的標(biāo)準(zhǔn)。因其支持自動(dòng)化部署、大規(guī)??缮炜s和容器化管理等天然優(yōu)勢(shì),已經(jīng)被廣泛接納。但由于 Kubernetes 本身的復(fù)雜性,也讓很多企業(yè)的...
摘要:零為何要學(xué)源碼簡(jiǎn)單,是我現(xiàn)在看起來(lái)最簡(jiǎn)單的源碼不會(huì)像封裝了一層又一層,把人繞暈,而沒(méi)有那么多封裝,上手快,我們學(xué)習(xí)就應(yīng)該從簡(jiǎn)單的開(kāi)始憑什么非要去學(xué)封的像粽子一樣的源碼,我們就是要去學(xué)簡(jiǎn)簡(jiǎn)單單,平時(shí)樸素,接地氣的源碼最接近業(yè)務(wù)代碼的源碼。 零 為何要學(xué)apollo源碼 1 簡(jiǎn)單,Apollo是我現(xiàn)在看起來(lái)最簡(jiǎn)單的源碼不會(huì)像spring封裝了一層又一層,把人繞暈,而apollo沒(méi)有那么多封...
摘要:今天逛了逛,順手精選出了一下近幾個(gè)月以來(lái)上最熱門(mén)的個(gè)項(xiàng)目。相關(guān)閱讀正式開(kāi)源,幫助應(yīng)用快速容器化未來(lái)可能會(huì)上熱門(mén)的項(xiàng)目地址介紹哈哈,皮一下很開(kāi)心。這是我自己開(kāi)源的一份文檔,目前仍在完善中,歡迎各位英雄好漢一起完善。 showImg(https://segmentfault.com/img/remote/1460000015766827?w=391&h=220);今天逛了逛Github,順...
閱讀 2921·2021-11-22 11:56
閱讀 3632·2021-11-15 11:39
閱讀 955·2021-09-24 09:48
閱讀 824·2021-08-17 10:14
閱讀 1405·2019-08-30 15:55
閱讀 2805·2019-08-30 15:55
閱讀 1394·2019-08-30 15:44
閱讀 2843·2019-08-30 10:59