Spring Cloud for Alibaba 之 Nacos 配置管理 (3)


    用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   #是否 動態刷新配置文件

  1. ext-config[n] 數字越大加載的優先級越高。
  2. 根據自身業務需求,可以配置多個ext-config。
  3. ext-config[n].data-id 的值是完整的dataId
  4. 集群環境和單機配置一樣
# 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

 

 如有其他問題或者疑難,歡迎留言,大家一起探討!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM