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