实现配置管理

在开发Spring Cloud应用时,您可以使用Nacos在本地实现应用的配置管理。由于Nacos是应用配置管理ACM的开源版本,在将应用部署到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。更多信息,请参见应用创建和部署概述(ECS)创建和部署应用概述(K8s)

后续操作

您的应用在部署到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文档