全部產品
Search
文件中心

Enterprise Distributed Application Service:實現組態管理

更新時間:Feb 08, 2025

在開發Spring Cloud應用時,您可以使用Nacos在本地實現應用的組態管理。由於Nacos是Application Configuration ManangementACM的開源版本,在將應用部署到EDAS後,即可通過EDAS整合的ACM對應用進行配置的管理和推送。

您可以按照文檔從零開發該應用樣本,並使用Spring Cloud Alibaba Nacos Config實現組態管理。也可以直接下載該應用樣本的Demo:nacos-config-example。

說明
  • Spring Cloud Alibaba Nacos Config完成了Nacos與Spring Cloud架構的整合,支援Spring Cloud的配置注入規範。

  • EDAS提供的組態管理與開源產品(Nacos)的組態管理功能不衝突。

準備工作

在開始開發前,請確保您已經完成以下工作:

  • 下載Maven並設定環境變數。

  • 下載最新版本的Nacos Server

  • 啟動Nacos Server。

    1. 解壓下載的Nacos Server壓縮包。

    2. 進入nacos/bin目錄,啟動Nacos Server。

      • Linux/Unix/Mac系統:執行命令sh startup.sh -m standalone

      • Windows系統:雙擊執行startup.cmd檔案。

      說明

      standalone表示單機模式運行,非叢集模式。startup.cmd檔案預設以叢集模式啟動,因此您在使用Windows系統時,如果直接雙擊執行startup.cmd檔案會導致啟動失敗,此時需要在startup.cmd檔案內設定MODE="standalone"。 更多資訊,請參見Nacos快速開始

  • 在本地Nacos Server控制台建立配置。

    1. 登入本地Nacos Server控制台(使用者名稱和密碼預設同為nacos)。

    2. 在左側導覽列中單擊配置列表,在配置列表頁面右上方單擊建立配置表徵圖增加表徵圖

    3. 建立配置頁面填入以下資訊,單擊發布

      • Data ID:nacos-config-example.properties

      • Group:DEFAULT_GROUP

      • 配置格式:Properties

      • 配置內容:test.name=nacos-config-test

使用Nacos Config實現組態管理

  1. 建立一個Maven工程,命名為nacos-config-example

  2. pom.xml檔案中添加依賴。

    以Spring Boot 2.1.4.RELEASE和Spring Cloud Greenwich.SR1為例。

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/>
    </parent>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.1.1.RELEASE</version>
        </dependency>
    </dependencies>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>                        

    樣本中使用的版本為Spring Cloud Greenwich ,對應Spring Cloud Alibaba版本為2.1.1.RELEASE。

    • 如果使用Spring Cloud Finchley版本,對應Spring Cloud Alibaba版本為2.0.1.RELEASE。

    • 如果使用Spring Cloud Edgware版本,對應Spring Cloud Alibaba版本為1.5.1.RELEASE。

    說明

    Spring Cloud Edgware版本的生命週期已結束,不推薦使用這個版本開發應用。

  3. src\main\java下,建立Packagecom.aliware.edas

  4. 在Packagecom.aliware.edas中建立nacos-config-example的啟動類NacosConfigExampleApplication

        import org.springframework.boot.SpringApplication;
        import org.springframework.boot.autoconfigure.SpringBootApplication;
    
        @SpringBootApplication
        public class NacosConfigExampleApplication {
            public static void main(String[] args) {
                SpringApplication.run(NacosConfigExampleApplication.class, args);
            }
        }                        
  5. 在Packagecom.aliware.edas中建立一個簡單的ControllerEchoController,自動注入一個屬性userName,且通過@Value註解指定從配置中取Key為test.name的值。

        import org.springframework.beans.factory.annotation.Value;
        import org.springframework.cloud.context.config.annotation.RefreshScope;
        import org.springframework.web.bind.annotation.RequestMapping;
        import org.springframework.web.bind.annotation.RestController;
    
        @RestController
        @RefreshScope
        public class EchoController {
    
            @Value("${test.name}")
            private String userName;
    
            @RequestMapping(value = "/")
            public String echo() {
                return userName;
            }
        }                        
  6. src\main\resources路徑下建立設定檔bootstrap.properties,在bootstrap.properties中添加如下配置,指定Nacos Server的地址。

    其中127.0.0.1:8848為Nacos Server的地址,18081為服務連接埠。

    如果您的Nacos Server部署在另外一台機器,則需要修改成對應的IP和連接埠。如果有其它需求,可以在bootstrap.properties檔案中增加配置。具體操作,請參考配置項參考

     spring.application.name=nacos-config-example
     server.port=18081
     spring.cloud.nacos.config.server-addr=127.0.0.1:8848                        
  7. 執行NacosConfigExampleApplication中的main函數,啟動應用。

本地結果驗證

在瀏覽器上訪問http://127.0.0.1:18081 ,可以看到傳回值為nacos-config-test ,該值即為在本地Nacos Server中建立配置中的配置內容,即test.name的值。

將應用部署到EDAS

將應用部署到EDAS前,需要先在EDAS的組態管理中建立和本地Nacos Server一致的配置,以便應用部署後可以同步配置,然後再將應用部署到EDAS。

  1. 在EDAS中建立和本地Nacos Server相同的配置。

    1. 登入EDAS控制台

    2. 在左側導覽列,選擇应用管理 > 微服务配置

    3. 配置列表頁面頂部功能表列選擇地區,在頁面上方選擇微服務空間,然後單擊创建配置

    4. 创建配置面板,設定和本地Nacos Server相同的參數配置,然後單擊建立

      • Data ID:nacos-config-example.properties

      • Group:DEFAULT_GROUP

      • 配置格式:Properties

      • 配置內容:test.name=nacos-config-test

      說明

      所屬地區微服務空間在配置列表中選擇,該面板中不可設定。

  2. 根據您的實際需求,將應用部署到EDAS。更多資訊,請參見建立和部署應用概述建立和部署應用概述

後續操作

您的應用在部署到EDAS後,還需要持續迭代、升級。如果每次都要在本地啟動Nacos Server、升級應用、本地驗證再部署到EDAS進行線上驗證,會影響開發效率。所以,EDAS提供了端雲互聯功能,開啟端雲互聯的應用在本地啟動後,和部署到EDAS的效果一致,可以直接讀取EDAS組態管理中的配置並和雲端的其他應用相互調用。

配置項參考

如果有其他需求,可以參照下表在bootstrap.properties檔案中增加配置。

配置項

key

預設值

說明

服務端地址

spring.cloud.nacos.config.server-addr

無。

DataId首碼

spring.cloud.nacos.config.prefix

${spring.application.name}

Data ID的首碼。

Group

spring.cloud.nacos.config.group

DEFAULT_GROUP

分組。

Data ID尾碼及內容檔案格式

spring.cloud.nacos.config.file-extension

properties

Data ID的尾碼,同時也是配置內容的檔案格式,預設是properties,也支援YAML和YML格式。

配置內容的編碼方式

spring.cloud.nacos.config.encode

UTF-8

配置的編碼。

擷取配置的逾時時間

spring.cloud.nacos.config.timeout

3000

單位為ms。

配置的命名空間

spring.cloud.nacos.config.namespace

常用情境之一是不同環境的配置的區分隔離,例如開發測試環境和生產環境的資源隔離等。

相對路徑

spring.cloud.nacos.config.context-path

服務端API的相對路徑。

存取點

spring.cloud.nacos.config.endpoint

UTF-8

地區的某個服務的入口網域名稱,通過此網域名稱可以動態地擷取服務端地址。

是否開啟監聽和自動重新整理

spring.cloud.nacos.config.refresh.enabled

true

預設為true,不需要修改。

更多配置項,請參考開源版本的Spring Cloud Alibaba Nacos Config文檔