當(dāng)前位置:首頁(yè) > IT課程問(wèn)答
Nacos多環(huán)境配置
在開(kāi)發(fā)過(guò)程中,我們的項(xiàng)目會(huì)存在不同的運(yùn)行環(huán)境,比如開(kāi)發(fā)環(huán)境、測(cè)試環(huán)境、生產(chǎn)環(huán)境,而我們的項(xiàng)目在不同的環(huán)境中,有的配置可能會(huì)不一樣,比如數(shù)據(jù)源配置、日志文件配置、以及一些軟件運(yùn)行過(guò)程中的基本配置,那每次我們將軟件部署到不同的環(huán)境時(shí),都需要修改相應(yīng)的配置文件,這樣來(lái)回修改,很容易出錯(cuò),而且浪費(fèi)勞動(dòng)力。
Nacos除了可以做注冊(cè)中心,也可以做統(tǒng)一配置管理(配置中心),Nacos提供了一種統(tǒng)一配置管理方案,可以集中管理所有實(shí)例的配置。
Nacos一方面可以將配置集中管理,另一方可以在配置變更時(shí),及時(shí)通知微服務(wù),實(shí)現(xiàn)配置的熱更新。
微服務(wù)要拉取Nacos中管理的配置,并且與本地的application.properties配置合并,才能完成項(xiàng)目啟動(dòng),否則項(xiàng)目啟動(dòng)時(shí)就會(huì)報(bào)錯(cuò)。
但是現(xiàn)在有個(gè)問(wèn)題:未讀取application.properties,又如何得知nacos地址呢?
Spring引入了一種新的配置文件:bootstrap.properties文件,會(huì)在application.properties之前被讀取。
1.DataID方案
在springboot配置文件中指定spring.profile.active和Nacos配置中心的DataID來(lái)使不同環(huán)境下讀取不同的配置。
1.1 Nacos配置中心
在Nacos頁(yè)面中配置管理的配置列表創(chuàng)建配置:
DataID完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
prefix 默認(rèn)為 spring.application.name 的值,也可以通過(guò)配置項(xiàng) spring.cloud.nacos.config.prefix來(lái)配置。因此prefix的名字需要與項(xiàng)目配置文件中spring.application.name 的值保持一致。
spring.profiles.active 即為當(dāng)前環(huán)境對(duì)應(yīng)的 profile,例如開(kāi)發(fā)環(huán)境為dev,測(cè)試環(huán)境為test,生產(chǎn)環(huán)境為prod等。 因此這里的值需要與項(xiàng)目配置文件中的spring.profiles.active的值保持一致。注意:當(dāng) spring.profiles.active 為空時(shí),對(duì)應(yīng)的連接符 - 也將不存在,dataId 的拼接格式變成 𝑝𝑟𝑒𝑓𝑖𝑥.{file-extension}。
file-exetension 為配置內(nèi)容的數(shù)據(jù)格式,可以通過(guò)配置項(xiàng) spring.cloud.nacos.config.file-extension 來(lái)配置。支持 properties 、 yaml 和 yml 類(lèi)型。
Group:分組,默認(rèn)為DEFAULT_GROUP。
配置格式:目前,Springboot中能識(shí)別的配置格式只支持YAML和Properties兩個(gè)格式。
配置內(nèi)容:根據(jù)自己需要配置的內(nèi)容進(jìn)行配置。
1.2 springboot配置
引入nacos-config依賴(lài)
<!-- 配置中心 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
創(chuàng)建bootstrap.properties
#注冊(cè)中心地址 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
啟動(dòng)springboot項(xiàng)目,使用postman通過(guò)消費(fèi)者遠(yuǎn)程訪問(wèn)接口,可以成功返回結(jié)果:
2.GROUP方案
我們知道Group為分組,默認(rèn)為:DEFAULT_GROUP,現(xiàn)在我們?cè)贜acos分出兩組,一組是“Dev開(kāi)發(fā)組”,一組是“test測(cè)試組”
2.1 Nacos配置中心
2.2 springboot配置
微服務(wù)根據(jù)指定分組為dev或test進(jìn)行切換。
啟動(dòng)springboot項(xiàng)目,使用postman通過(guò)消費(fèi)者遠(yuǎn)程訪問(wèn)接口,可以成功返回結(jié)果:
3.命名空間方案
我們創(chuàng)建命名空間, 通過(guò)切換對(duì)應(yīng)的命名空間,然后再通過(guò)Group和DataID來(lái)進(jìn)行切換,即可以按照Namespace+Group+DataId來(lái)切換使用不同的配置文件。
3.1 Nacos配置中心
3.1.1 創(chuàng)建命名空間
在Nacos頁(yè)面點(diǎn)擊命名空間,點(diǎn)擊創(chuàng)建命名空間
輸入要新建的空間名,點(diǎn)擊確定
點(diǎn)擊服務(wù)列表和配置列表,查看多出一個(gè)命名空間
3.1.2 配置中心新增配置文件
在test命名空間下新建配置
添加配置項(xiàng):
在此,我們可以定義不同的GROUP及DataID,實(shí)現(xiàn)Namespace+Group+DataId來(lái)切換不同的配置文件。
3.2 springboot配置
在bootstrap.properties文件中配置namespace、group及DataID
#注冊(cè)中心地址 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
啟動(dòng)springboot項(xiàng)目,使用postman通過(guò)消費(fèi)者遠(yuǎn)程訪問(wèn)接口,可以成功返回結(jié)果:
4.權(quán)限控制+命名空間方案
在命名空間基礎(chǔ)上,添加用戶(hù)權(quán)限控制,可根據(jù)不同用戶(hù)拉取該用戶(hù)所擁有的不同命名空間的配置。
4.1 權(quán)限控制
4.1.1 開(kāi)啟權(quán)限控制
在nacos目錄的conf文件夾下編輯application.properties,設(shè)置:
nacos.core.auth.enabled=true
4.1.2 創(chuàng)建自定義用戶(hù)
在Nacos頁(yè)面上點(diǎn)擊用戶(hù)列表,在列表頁(yè)面點(diǎn)擊創(chuàng)建用戶(hù)
輸入用戶(hù)名和密碼,點(diǎn)擊確定完成用戶(hù)創(chuàng)建。
4.1.3 創(chuàng)建角色
在Nacos頁(yè)面上點(diǎn)擊角色管理,在管理頁(yè)面點(diǎn)擊綁定角色
角色名可以自定義輸入任意的名稱(chēng),用戶(hù)名輸入已經(jīng)創(chuàng)建的用戶(hù),點(diǎn)擊確定完成。
4.1.4 創(chuàng)建權(quán)限
在Nacos頁(yè)面上點(diǎn)擊權(quán)限管理,在管理頁(yè)面點(diǎn)擊添加權(quán)限
角色名:已經(jīng)創(chuàng)建的角色
資源:已經(jīng)創(chuàng)建的命名空間
動(dòng)作:只讀(r)、只寫(xiě)(w)、讀寫(xiě)(rw)
點(diǎn)擊確定按鈕,完成權(quán)限添加。
在nacos頁(yè)面上退出賬號(hào),以新創(chuàng)建的賬號(hào)登錄:
當(dāng)訪問(wèn)配置列表和服務(wù)列表的public時(shí),提示權(quán)限認(rèn)證失敗,此時(shí)配置列表中public命名空間的配置文件不能進(jìn)行讀寫(xiě)。
4.1.5 創(chuàng)建命名空間的配置文件
根據(jù)命名空間方案(文中第3中方案)創(chuàng)建配置文件,以test命名空間為例,創(chuàng)建test命名空間,在test命名空間下創(chuàng)建配置文件。
4.2 springboot配置
在bootstrap.properties中添加test的用戶(hù)名、密碼、命名空間配置
#注冊(cè)中心地址 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用戶(hù)分配了test命名空間,所以需要在application.properties中添加test的命名空間配置,在bootstrap.properties中已經(jīng)配置nacos的用戶(hù)名和密碼,在這里可不配置,用戶(hù)名默認(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 測(cè)試
啟動(dòng)springboot項(xiàng)目,使用postman通過(guò)消費(fèi)者遠(yuǎn)程訪問(wèn)接口,可以成功返回結(jié)果:
將bootstrap.properties中的group、active修改為dev,啟動(dòng)springboot項(xiàng)目則報(bào)錯(cuò):
該現(xiàn)象說(shuō)明當(dāng)group、active修改為dev后,test用戶(hù)沒(méi)有權(quán)限訪問(wèn),不能拉取nacos中dev命名空間下的配置文件,導(dǎo)致springboot項(xiàng)目啟動(dòng)獲取配置文件中的配置項(xiàng)時(shí)失敗。