本文以Nacos配置管理的Demo应用为例,介绍如何在本地开发、调试Spring Cloud应用,使用Spring Cloud Alibaba Nacos Config实现配置管理,并通过SAE进行配置管理与推送。

前提条件

在开发前,确保您已完成以下工作:

  • 下载Maven并设置环境变量。具体信息,请参见设置环境变量
  • 下载最新版本的Nacos Server
  • 启动Nacos Server。
    1. 解压下载的Nacos Server压缩包。
    2. 进入nacos/bin目录,启动Nacos Server。
      • Linux、Unix和macOS系统:执行命令sh startup.sh -m standalone
      • Windows系统:双击执行startup.cmd文件。

  • 在本地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的应用配置管理ACM的开源版本,在应用部署到SAE后,您可以通过SAE对应用进行配置的管理和推送。

本文以Spring Cloud应用开发过程为例,使用Spring Cloud Alibaba Nacos Config实现配置管理。您可以下载该应用示例的Demo进行操作。

说明 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应用运行环境SAE-JAR方式部署-应用运行环境配置

在部署应用前,请使用SAE的配置管理功能,创建与本地Nacos Server中相同的应用配置。

  1. 登录SAE控制台
  2. 在左侧导航栏选择配置管理>配置列表
  3. 配置列表页面选择地域命名空间,单击创建配置
  4. 创建配置页面,输入以下参数,配置完成后单击创建
    参数 说明
    Data ID 配置ID,以nacos-config-example.properties为例。

    采用类似package.class(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。建议根据配置的业务含义定义class部分。仅允许使用英文小写字符和以下4种特殊字符:英文句号(.)、冒号(:)、短划线(-)和下划线(_)。不超过236个字符。

    Group 配置分组(命名空间),以DEFAULT_GROUP为例。

    建议填写产品名:模块名(如 ACM:Test)保证唯一性。后续可以根据Group进行鉴权。仅允许使用英文字符和以下4种特殊字符:英文句号(.)、冒号(:)、短划线(-)和下划线(_)。不超过128个字符。

    (可选)数据加密 配置数据是否加密。如果您的配置中包含敏感数据,建议您使用加密存储功能,降低配置泄漏风险。
    注意 使用前必须开通密钥管理服务,并授权ACM使用密钥管理服务进行加解密。因为ACM数据加密功能依赖密钥管理服务,为其配置加密。加密配置的Data ID均以cipher-开头,具体操作,请参见创建和使用加密配置
    配置格式 选择配置格式,以TEXT为例。

    SAE会根据您选择的格式进行数据校验。默认选择TEXT,支持TEXTJSONXMLYAMLHTMLProperties格式。

    配置内容 输入配置的内容,以test.name=nacos-config-test为例。

    建议不超过10 KB,最大不超过100 KB。

    (可选)配置描述 配置描述信息。便于理解配置含义,不超过128个字符。
    (可选)更多配置
    (可选)应用 配置归属应用名。仅允许使用英文小写字符和以下4种特殊字符:英文句号(.)、冒号(:)、短划线(-)和下划线(_)。不超过128个字符。
    (可选)标签 配置标签。方便您根据自己的维度管理配置,最多支持5个标签,每个标签不超过64个字符。

结果验证

部署完成后,您可以通过查看日志确认应用是否启动成功。

  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文档