全部產品
Search
文件中心

Serverless App Engine:實現組態管理

更新時間:Feb 22, 2025

本文以Nacos組態管理的Demo應用為例,介紹如何在本地開發、調試Spring Cloud應用,使用Spring Cloud Alibaba Nacos Config實現組態管理,並通過SAE進行組態管理與推送。

前提條件

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

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

  • 啟動Nacos Server。

    1. 下載並解壓Nacos Server

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

      • Linux、Unix、macOS系統:執行命令sudo sh startup.sh -m standalone

      • Windows系統:執行命令startup.cmd -m standalone

      說明

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

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

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

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

    3. 建立配置頁面,輸入以下參數,並單擊發布

      • Data IDnacos-config-example.properties

      • GroupDEFAULT_GROUP

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

背景資訊

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

本文以Spring Cloud應用開發過程為例,使用Spring Cloud Alibaba Nacos Config實現組態管理。您可以下載該應用樣本的nacos-config-example.zip進行操作。

說明

Spring Cloud Alibaba Nacos Config對Nacos與Spring Cloud的架構進行整合,支援Spring Cloud的配置注入規範。

步驟一:使用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函數,啟動應用。

步驟二:部署到SAE

在本地完成應用的開發與測試後,您可以將應用程式部署到SAE。具體操作,請參見應用部署

  • SAE組態管理中心提供正式商用版本的Nacos Server。當您將應用部署到SAE時,SAE會通過優先順序更高的方式去設定Nacos Server服務端地址和服務連接埠,以及namespaceaccess-keysecret-keycontext-path資訊。您無需進行任何額外的配置,原有的配置內容可以選擇保留或刪除。

  • 您初次在SAE控制台進行部署時,如果選擇JAR包部署,在建立應用時,應用運行環境必須選擇標準Java應用運行環境

    t5edYO3jaM

在部署應用前,請使用SAE的組態管理功能,建立與本地Nacos Server中相同的應用配置。

  1. 登入SAE控制台,在左側導覽列單擊命名空間,然後在頂部功能表列選擇目標地區。

  2. 命名空間頁面,單擊目標命名空間名稱,

  3. 在目標命名空間頁面,在左側導覽列選擇分布式組態管理 > 配置列表,然後在配置列表頁面,單擊建立配置

  4. 在彈出的建立配置面板,按照下表說明配置參數,配置完成後單擊建立

    配置項

    說明

    Data ID

    配置ID,以nacos-config-example.properties為例。

    採用類似package.class(如com.taobao.tc.refund.log.level)的命名規則保證全域唯一性。建議根據配置的業務含義定義class部分。

    Group

    配置分組(命名空間),以DEFAULT_GROUP為例。

    建議填寫產品名:模組名(如 ACM:Test)保證唯一性。後續可以根據Group進行鑒權。

    資料加密

    配置資料是否加密。如果您的配置中包含敏感性資料,建議您使用加密儲存功能,降低配置泄露風險。

    重要

    ACM資料加密功能依賴Key Management Service,因此使用前必須開通Key Management Service,並授權ACM使用Key Management Service進行加解密。加密配置的Data ID均以cipher-開頭,具體操作,請參見建立和使用加密配置

    配置格式

    選擇配置格式,以TEXT為例。

    配置內容

    輸入配置的內容,以test.name=nacos-config-test為例。

    配置描述

    配置描述資訊,便於理解配置含義。

    更多配置

    應用

    配置歸屬的應用程式名稱。

    標籤

    配置標籤。方便您根據自己的維度管理配置,最多支援5個標籤。

步驟三:結果驗證

部署完成後,您可以通過查看日誌確認應用是否啟動成功。

  1. 執行命令curl http://<應用執行個體 IP>:<服務連接埠>

    例如curl http://192.168.0.34:8080,查看是否返回配置內容nacos-config-test

  2. 登入SAE控制台,將原有配置內容修改為nacos-config-test2,再執行命令curl http://<應用執行個體 IP>:<服務連接埠>

    例如curl http://192.168.0.34:8080,查看是否返回變更後配置內容nacos-config-test2

配置項參考

如果有其他需求,可以參照下表在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文檔