JAVA-Nacos多環(huán)境配置
時間:2023-04-23 來源:華清遠(yuǎn)見
Nacos多環(huán)境配置
在開發(fā)過程中,我們的項目會存在不同的運(yùn)行環(huán)境,比如開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境,而我們的項目在不同的環(huán)境中,有的配置可能會不一樣,比如數(shù)據(jù)源配置、日志文件配置、以及一些軟件運(yùn)行過程中的基本配置,那每次我們將軟件部署到不同的環(huán)境時,都需要修改相應(yīng)的配置文件,這樣來回修改,很容易出錯,而且浪費(fèi)勞動力。
Nacos除了可以做注冊中心,也可以做統(tǒng)一配置管理(配置中心),Nacos提供了一種統(tǒng)一配置管理方案,可以集中管理所有實例的配置。
Nacos一方面可以將配置集中管理,另一方可以在配置變更時,及時通知微服務(wù),實現(xiàn)配置的熱更新。

微服務(wù)要拉取Nacos中管理的配置,并且與本地的application.properties配置合并,才能完成項目啟動,否則項目啟動時就會報錯。
但是現(xiàn)在有個問題:未讀取application.properties,又如何得知nacos地址呢?
Spring引入了一種新的配置文件:bootstrap.properties文件,會在application.properties之前被讀取。
1.DataID方案
在springboot配置文件中指定spring.profile.active和Nacos配置中心的DataID來使不同環(huán)境下讀取不同的配置。
1.1 Nacos配置中心
在Nacos頁面中配置管理的配置列表創(chuàng)建配置:


DataID完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
prefix 默認(rèn)為 spring.application.name 的值,也可以通過配置項 spring.cloud.nacos.config.prefix來配置。因此prefix的名字需要與項目配置文件中spring.application.name 的值保持一致。
spring.profiles.active 即為當(dāng)前環(huán)境對應(yīng)的 profile,例如開發(fā)環(huán)境為dev,測試環(huán)境為test,生產(chǎn)環(huán)境為prod等。 因此這里的值需要與項目配置文件中的spring.profiles.active的值保持一致。注意:當(dāng) spring.profiles.active 為空時,對應(yīng)的連接符 - 也將不存在,dataId 的拼接格式變成 𝑝𝑟𝑒𝑓𝑖𝑥.{file-extension}。
file-exetension 為配置內(nèi)容的數(shù)據(jù)格式,可以通過配置項 spring.cloud.nacos.config.file-extension 來配置。支持 properties 、 yaml 和 yml 類型。
Group:分組,默認(rèn)為DEFAULT_GROUP。
配置格式:目前,Springboot中能識別的配置格式只支持YAML和Properties兩個格式。
配置內(nèi)容:根據(jù)自己需要配置的內(nèi)容進(jìn)行配置。
1.2 springboot配置
引入nacos-config依賴
<!-- 配置中心 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
創(chuàng)建bootstrap.properties
#注冊中心地址 spring.cloud.nacos.config.server-addr=localhost:8848 #與配置中心DataID的prefix一致 spring.cloud.nacos.config.prefix=productor ##與配置中心DataID的file-exetension一致 spring.cloud.nacos.config.file-extension=properties #與配置中心DataID的spring.profiles.active一致 spring.profiles.active=dev
啟動springboot項目,使用postman通過消費(fèi)者遠(yuǎn)程訪問接口,可以成功返回結(jié)果:

2.GROUP方案
我們知道Group為分組,默認(rèn)為:DEFAULT_GROUP,現(xiàn)在我們在Nacos分出兩組,一組是“Dev開發(fā)組”,一組是“test測試組”
2.1 Nacos配置中心


2.2 springboot配置
微服務(wù)根據(jù)指定分組為dev或test進(jìn)行切換。

啟動springboot項目,使用postman通過消費(fèi)者遠(yuǎn)程訪問接口,可以成功返回結(jié)果:

3.命名空間方案
我們創(chuàng)建命名空間, 通過切換對應(yīng)的命名空間,然后再通過Group和DataID來進(jìn)行切換,即可以按照Namespace+Group+DataId來切換使用不同的配置文件。
3.1 Nacos配置中心
3.1.1 創(chuàng)建命名空間
在Nacos頁面點(diǎn)擊命名空間,點(diǎn)擊創(chuàng)建命名空間

輸入要新建的空間名,點(diǎn)擊確定

點(diǎn)擊服務(wù)列表和配置列表,查看多出一個命名空間

3.1.2 配置中心新增配置文件
在test命名空間下新建配置

添加配置項:

在此,我們可以定義不同的GROUP及DataID,實現(xiàn)Namespace+Group+DataId來切換不同的配置文件。
3.2 springboot配置
在bootstrap.properties文件中配置namespace、group及DataID
#注冊中心地址 spring.cloud.nacos.config.server-addr=localhost:8848
#與配置中心DataID的prefix一致 spring.cloud.nacos.config.prefix=productor ##與配置中心DataID的file-exetension一致
spring.cloud.nacos.config.file-extension=properties spring.cloud.nacos.config.group=TEST_GROUP
#與配置中心DataID的spring.profiles.active一致
spring.profiles.active=test spring.cloud.nacos.config.namespace=5f8d56ea-111b-46e6-9edb-68bf92b9706b
啟動springboot項目,使用postman通過消費(fèi)者遠(yuǎn)程訪問接口,可以成功返回結(jié)果:

4.權(quán)限控制+命名空間方案
在命名空間基礎(chǔ)上,添加用戶權(quán)限控制,可根據(jù)不同用戶拉取該用戶所擁有的不同命名空間的配置。
4.1 權(quán)限控制
4.1.1 開啟權(quán)限控制
在nacos目錄的conf文件夾下編輯application.properties,設(shè)置:
nacos.core.auth.enabled=true
4.1.2 創(chuàng)建自定義用戶
在Nacos頁面上點(diǎn)擊用戶列表,在列表頁面點(diǎn)擊創(chuàng)建用戶

輸入用戶名和密碼,點(diǎn)擊確定完成用戶創(chuàng)建。
4.1.3 創(chuàng)建角色
在Nacos頁面上點(diǎn)擊角色管理,在管理頁面點(diǎn)擊綁定角色

角色名可以自定義輸入任意的名稱,用戶名輸入已經(jīng)創(chuàng)建的用戶,點(diǎn)擊確定完成。
4.1.4 創(chuàng)建權(quán)限
在Nacos頁面上點(diǎn)擊權(quán)限管理,在管理頁面點(diǎn)擊添加權(quán)限

角色名:已經(jīng)創(chuàng)建的角色
資源:已經(jīng)創(chuàng)建的命名空間
動作:只讀(r)、只寫(w)、讀寫(rw)
點(diǎn)擊確定按鈕,完成權(quán)限添加。
在nacos頁面上退出賬號,以新創(chuàng)建的賬號登錄:

當(dāng)訪問配置列表和服務(wù)列表的public時,提示權(quán)限認(rèn)證失敗,此時配置列表中public命名空間的配置文件不能進(jìn)行讀寫。
4.1.5 創(chuàng)建命名空間的配置文件
根據(jù)命名空間方案(文中第3中方案)創(chuàng)建配置文件,以test命名空間為例,創(chuàng)建test命名空間,在test命名空間下創(chuàng)建配置文件。

4.2 springboot配置
在bootstrap.properties中添加test的用戶名、密碼、命名空間配置
#注冊中心地址 spring.cloud.nacos.config.server-addr=localhost:8848
#與配置中心DataID的prefix一致 spring.cloud.nacos.config.prefix=productor #
#與配置中心DataID的file-exetension一致
spring.cloud.nacos.config.file-extension=properties spring.cloud.nacos.config.group=TEST_GROUP
#與配置中心DataID的spring.profiles.active一致
spring.profiles.active=test spring.cloud.nacos.config.namespace=5f8d56ea-111b-46e6-9edb-68bf92b9706b spring.cloud.nacos.username=test spring.cloud.nacos.password=123456
由于在Nacos中給test用戶分配了test命名空間,所以需要在application.properties中添加test的命名空間配置,在bootstrap.properties中已經(jīng)配置nacos的用戶名和密碼,在這里可不配置,用戶名默認(rèn)使用spring.cloud.nacos.username,密碼默認(rèn)使用spring.cloud.nacos.password。
spring.cloud.nacos.discovery.server-addr=localhost:8848 spring.cloud.nacos.discovery.service=${spring.application.name} spring.cloud.nacos.discovery.namespace=${spring.cloud.nacos.config.namespace}
4.3 測試
啟動springboot項目,使用postman通過消費(fèi)者遠(yuǎn)程訪問接口,可以成功返回結(jié)果:

將bootstrap.properties中的group、active修改為dev,啟動springboot項目則報錯:

該現(xiàn)象說明當(dāng)group、active修改為dev后,test用戶沒有權(quán)限訪問,不能拉取nacos中dev命名空間下的配置文件,導(dǎo)致springboot項目啟動獲取配置文件中的配置項時失敗。
華清遠(yuǎn)見上海中心喬遷新居,開啟全新發(fā)展篇章!
華清遠(yuǎn)見連續(xù)9年獲ISO9001質(zhì)量管理體系認(rèn)證,匠心做產(chǎn)
華清遠(yuǎn)見關(guān)于教育部高教司2023年產(chǎn)學(xué)合作協(xié)同育人項目
華清遠(yuǎn)見再獲兩項計算機(jī)軟件著作權(quán)登記證書,行業(yè)實力
華清遠(yuǎn)見嵌入式師資班圓滿收官,虛擬仿真全面構(gòu)建系統(tǒng)
華清遠(yuǎn)見被授予中國電子學(xué)會“電子信息人才能力提升工
企校協(xié)同創(chuàng)新大賽全國總決賽在清華大學(xué)圓滿收官,華清
華清遠(yuǎn)見教育集團(tuán)再次入選教育部供需對接就業(yè)育人項目
華清遠(yuǎn)見關(guān)于提醒學(xué)員謹(jǐn)防網(wǎng)絡(luò)詐騙的嚴(yán)正聲明
華清遠(yuǎn)見協(xié)辦“技能興魯”職業(yè)技能大賽人工智能賽項圓
