SpringBoot實(shí)現(xiàn)連接nacos并支持多環(huán)境部署
nacos安裝
官網(wǎng)有很詳細(xì)的步驟,這里不再贅述:https://nacos.io/zh-cn/docs/quick-start.html
nacos服務(wù)配置基本步驟
- 下載jar包或同步代碼后編譯jar包
- 生成MySql數(shù)據(jù)庫(kù)表 (MySql腳本在:config目錄里的nacos-mysql.sql)
- 重置nacos默認(rèn)用戶的密碼,用下面方式取得密碼的加密串,更新數(shù)據(jù)表里的密碼
String password = new BCryptPasswordEncoder().encode("你的密碼");
- 部署到服務(wù)器,并修改conf/application.properties文件支持mysql,詳細(xì)參考:https://nacos.io/zh-cn/docs/deployment.html
- 啟動(dòng)nacos服務(wù)
- 用新密碼登陸,后可以新建各種配置
SpringBoot客戶端讀取nacos的配置
- pom引用:
<dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-config-spring-boot-starter</artifactId> <version>0.2.1</version> </dependency>
- 配置nacos服務(wù)地址
在配置文件中配置nacos服務(wù)的地址
nacos: config: server-addr: 10.10.1.111:8848
- 獲取public空間下的默認(rèn)group的某個(gè)dataId的某個(gè)屬性值
nacos默認(rèn)創(chuàng)建了一個(gè)“public”的命名空間,創(chuàng)建的dataId在默認(rèn)名為“DEFAULT_GROUP”的group下。
獲取默認(rèn)環(huán)境下的新建的例如叫"myfirstconfig"這個(gè)dataId的配置的方法如下:
@NacosPropertySource(dataId = "myfirstconfig", autoRefreshed = true) public class NacosMyFirstConfig { @NacosValue(value = "${ExpireSeconds:30}", autoRefreshed = true) private int expireSeconds;
假設(shè)"myfirstconfig"這個(gè)dataId中有個(gè)屬性名為ExpireSeconds,獲取這個(gè)屬性名的值的方法如上,ExpireSeconds冒號(hào)后面的值為默認(rèn)值,當(dāng)獲取不到nacos對(duì)應(yīng)的屬性名時(shí)使用的默認(rèn)值。
autoRefreshed = true則表示nacos server上這個(gè)屬性值一旦變化,客戶端就能獲取到新的變化后的值。
- 你可以新建新的namespace命名空間和新的group名,接下來(lái)多環(huán)境的部署就要用到不同的namespace
SpringBoot客戶端多環(huán)境使用nacos
我們的程序一般會(huì)有開發(fā)環(huán)境、測(cè)試環(huán)境、生產(chǎn)環(huán)境,或者測(cè)試和生成之間有堡壘環(huán)境,一套java代碼是通過(guò)指定 spring.profiles.active以及對(duì)應(yīng)的application-xxx.yml來(lái)控制不同環(huán)境及其配置的。
那么怎么讓不同的環(huán)境,讀取到不同的nacos配置值呢?
在nacos上創(chuàng)建不同的namespace
- nacos上可以創(chuàng)建多個(gè)namespace,除了默認(rèn)的public的namespace,你可以創(chuàng)建dev、test等namespace。新建的namespace會(huì)在名稱旁邊出現(xiàn)一串字符,如6e9c8f46-3e40-41f2-9bf3-50f78c860971,這就是
- 這個(gè)namespac的唯一ID,記下這些唯一ID,接下來(lái)有用。
在每個(gè)namespace中創(chuàng)建相同名稱的一套dataId,里面的屬性名也相同,只有屬性值不同,都放在默認(rèn)的“DEFAULT_GROUP”的group下
- 比如剛才的myfirstconfig這個(gè)dataId,在dev和test的namespace下都創(chuàng)建出來(lái),并且里面也都有ExpireSeconds這個(gè)屬性名,屬性值可以不同。
客戶端指定不同的namespace
- 在不同的application-xxx.yml文件中指定不同的namespace
nacos: config: server-addr: 10.10.1.111:8848 namespace: 6e9c8f46-3e40-41f2-9bf3-50f78c860971
注意namespace不是填寫dev、test這些名稱,而是要填寫唯一ID串,每個(gè)新建的namespace都有一個(gè)唯一ID,如上所示。
如果是調(diào)用默認(rèn)的publicnamespace,則不需要指定namespace
這樣,你可以發(fā)現(xiàn),不同的環(huán)境啟動(dòng)的程序,獲取到的是不同的namespace下的屬性值,其余地方的代碼不需要做任何修改。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
如何使用Resttemplate和Ribbon調(diào)用Eureka實(shí)現(xiàn)負(fù)載均衡
這篇文章主要介紹了如何使用Resttemplate和Ribbon調(diào)用Eureka實(shí)現(xiàn)負(fù)載均衡,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03java用靜態(tài)工廠代替構(gòu)造函數(shù)使用方法和優(yōu)缺點(diǎn)
這篇文章主要介紹了java用靜態(tài)工廠代替構(gòu)造函數(shù)使用方法和優(yōu)缺點(diǎn),需要的朋友可以參考下2014-02-02Java Spring5學(xué)習(xí)之JdbcTemplate詳解
這篇文章主要介紹了Java Spring5學(xué)習(xí)之JdbcTemplate詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-05-05Mybatis配置之properties和settings標(biāo)簽的用法
這篇文章主要介紹了Mybatis配置之properties和settings標(biāo)簽的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07springboot做代理分發(fā)服務(wù)+代理鑒權(quán)的實(shí)現(xiàn)過(guò)程
這篇文章主要介紹了springboot做代理分發(fā)服務(wù)+代理鑒權(quán)的實(shí)現(xiàn)過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01SpringBoot如何使用ApplicationContext獲取bean對(duì)象
這篇文章主要介紹了SpringBoot 如何使用ApplicationContext獲取bean對(duì)象,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11使用springboot對(duì)linux進(jìn)行操控的方法示例
這篇文章主要介紹了使用springboot對(duì)linux進(jìn)行操控的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11Java基于接口實(shí)現(xiàn)模擬動(dòng)物聲音代碼實(shí)例
這篇文章主要介紹了Java基于接口實(shí)現(xiàn)模擬動(dòng)物聲音代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06