用Nacos 當作注冊中心,啟動 應用之后, 接下來就學習 使用Nacos的 配置中心功能!
Nacos當作配置中心使用,配置簡單,但是文檔不是很好找。
配置參考官方wiki:https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config
本項目源碼 git: https://github.com/xujianguo1/alicloud-demo.git
一、 配置&引入
1. pom 引入對應的starter
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>${nacos-boot-start.version}</version> </dependency>
2. 在resources下新建配置文件: bootstrap.properties , 根據springboot規范,文件名必須是bootstrap ,后綴可以是 properties、xml、yml、yaml的 一種。
配置文件填入基本內容:
1 server.name=server-product-demo 2 #tomcat端口號 3 server.port=8082 6 7 #應用名,不配置data-id 則默認為data-id前綴 8 spring.application.name=product-demo 9 #nacos配置信息 10 spring.cloud.nacos.config.server-addr=127.0.0.1:8848 11 #nacos 的dataId后綴 12 spring.cloud.nacos.config.file-extension=yml
再將其他配置,放入nacos 上面即可,nacos上配置示例:
在nacos上面,新建配置文件, dataId、group 是可以隨意填寫的,只要在同一個命名空間下, dataId + Group組合一起,不重復即可。
應用加載配置的時候,加載規則如下:
1. 未配置profile : 加載${spring.application.name}.${file-extension:properties} , 本例加載:product-demo.yml
2. 配置profile=dev , 在加載${spring.application.name}.${file-extension:properties} 配置文件后,
還要加載:${spring.application.name}-${profile}.${file-extension:properties}
這個配置文件,即:product-demo-dev.yml
如果未加載到,則控制台會報錯, 加載到的配置文件,可以從以下2個地方查看:
1. 控制台日志,
2. springboot admin server的 Enviroment 里面查看。
二、 Nacos完整配置
在nacos 的控制台,server端的配置比較少。
Nacos Server端配置:
1. 可以新建不同 namespace ,在不同命名空間新建不同配置文件。
2. 新建配置文件,dataId +groupId 不同即可,文件內容自己填寫。選擇配置格式,可以觸發相應的規則檢查。
Nacos Client配置:
1 nacos: 2 server-address: 127.0.0.1 3 port: 8848 4 5 spring: 6 profiles: 7 active: prod #指定開發環境,profile 8 application: 9 name: order-demo #應用名,默認的dataId前綴 10 cloud: 11 nacos: 12 config: 13 server-addr: ${nacos.server-address}:${nacos.port} #nacos地址 14 file-extension: yml #應用擴展名. 15 shared-dataids: constants.yml,url-${spring.profiles.active}.yml #shareDataId 配置,dataIds是寫死的,可以手動引入profile 16 ext-config[0].dataid: common.yml #ext-config[0] 的dataId,這里會直接查找common.yml ,profile配置不起作用 17 ext-config[0].group: common-config # ext-config[0] 的group 18 ext-config[1].dataid: ${spring.application.name}_biz.yml #配置ext-config[1]配置文件,不寫group則用默認分組 19 ext-config[1].refresh: true #是否 動態刷新配置文件
- ext-config[n] 數字越大加載的優先級越高。
- 根據自身業務需求,可以配置多個ext-config。
- ext-config[n].data-id 的值是完整的dataId
- 集群環境和單機配置一樣
# namespace 命名空間配置未列出,第三節講
以上配置為 項目order-demo 的 client配置, profile = prod, 最終會加載的配置文件如下:
shared-dataids: constants.yml, url-prod.yml
ext1 : common.yml ,gourp=common-config
ext2: order-demo_biz.yml
默認:order-demo.yml
默認profile: order-demo-prod.yml
顯示配置了4個文件,其實一共加載了6個文件,配置優先級依次遞增。 即默認profile的 order-demo-prod.yml 里面配置優先級最高,會覆蓋之前的配置。
官方文檔里面內容如下:
三、多環境切換配置
一個系統,必然涉及到多套環境, 測試、開發、性能測試、預發、線上等環境。
Nacos 也是支持這2中配置的,支持的方式有2種 :
1. 通過spring.profile 方式支持。 例如 order-demo里面的 spring.profile.active=prod
2. 通過namespace 方式支持。 官方示例: spring.cloud.nacos.config.namespace=b3404bc0-d7dc-4855-b519-570ed34b62d7
設置Profile 方式:
如上 order-demo 示例, 可以設置profile ,然后再 配置里面 帶上 ${spring.profiles.active} 即可,在啟動應用的時候,設置profile參數,達到動態切換配置文件的目的。
profile 方式弊端:
1. 配置繁瑣,
2.在同一個 命名空間下,文件數量過多,不方便查看
3.不利於后續的權限控制(雖然nacos目前還沒有 權限控制功能,后續肯定會添加),nacos的權限控制計划時根據namespace的多租戶方案
設置namespece方式(推薦):
nacos可以自定義多個namespace,在namespace下再自定義配置信息,如下:
如 product-demo所示,不配置profile, 在啟動的時候 設置啟動參數:
-Dspring.cloud.nacos.config.namespace=3df1f638-2297-411c-94ff-7382fd3327a0
Intelij 配置如下:
四、 其他
配置動態刷新
在client配置動態刷新后,代碼里面還要配置 @RefreshScope ,@Value 注解的值才會更新。否則在Nacos 控制台修改了配置的值, 應用的日志里面也打印了 配置刷新信息,並且在SpringBoot AdminServer里面也看到了最 新的變更,但是在程序里面 值還是不會變化的。
Springboot Admin 顯示buildInfo 信息:
能直觀看到buildInfo信息,對線上排錯是很方便的。 在將配置放入nacos,啟動配置放入bootstrap.yml 后,自定義的info信息在 SpringBoot Admin Server里面就會失效,根據這篇blog設置,可以重新顯示 相關的信息:https://blog.csdn.net/qq_26000415/article/details/79234812
Nacos配置使用比較簡單,可能還要1、2項配置沒用展示,大家可以根據官方文檔摸索。
項目是個連續項目,nacos配置部分已打分支,后續會添加spring cloud的其他內容。
源碼地址: https://github.com/xujianguo1/alicloud-demo.git 分支&Release:NacosConfig
如有其他問題或者疑難,歡迎留言,大家一起探討!