全部产品
云市场

实现配置管理

更新时间:2019-09-16 16:01:40

在开发 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 的配置注入规范。

准备工作

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

  • 下载 Maven 并设置环境变量。

  • 下载最新版本的 Nacos Server

  • 启动 Nacos Server。

    1. 解压下载的 Nacos Server 压缩包

    2. 进入nacos/bin目录,启动 Nacos Server。

      • Linux/Unix/Mac 系统:执行命令sh startup.sh -m standalone
      • Windows 系统:双击执行startup.cmd文件。

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

    1. 登录本地 Nacos Server 控制台(用户名和密码默认同为 nacos)。

    2. 在左侧导航栏中单击配置列表,在配置列表页面右上角单击新建配置图标

    3. 新建配置页面填入以下信息,然后单击发布

      • Data ID: nacos-config-example.properties

      • Group: DEFAULT_GROUP

      • 配置内容: 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 为例,依赖如下:

    1. <parent>
    2. <groupId>org.springframework.boot</groupId>
    3. <artifactId>spring-boot-starter-parent</artifactId>
    4. <version>2.1.4.RELEASE</version>
    5. <relativePath/>
    6. </parent>
    7. <dependencies>
    8. <dependency>
    9. <groupId>org.springframework.boot</groupId>
    10. <artifactId>spring-boot-starter-web</artifactId>
    11. </dependency>
    12. <dependency>
    13. <groupId>com.alibaba.cloud</groupId>
    14. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    15. <version>2.1.0.RELEASE</version>
    16. </dependency>
    17. </dependencies>
    18. <dependencyManagement>
    19. <dependencies>
    20. <dependency>
    21. <groupId>org.springframework.cloud</groupId>
    22. <artifactId>spring-cloud-dependencies</artifactId>
    23. <version>Greenwich.SR1</version>
    24. <type>pom</type>
    25. <scope>import</scope>
    26. </dependency>
    27. </dependencies>
    28. </dependencyManagement>
    29. <build>
    30. <plugins>
    31. <plugin>
    32. <groupId>org.springframework.boot</groupId>
    33. <artifactId>spring-boot-maven-plugin</artifactId>
    34. </plugin>
    35. </plugins>
    36. </build>

    示例中使用的版本为 Spring Cloud Greenwich ,对应 Spring Cloud Alibaba 版本为 0.9.0.RELEASE。

    • 如果使用 Spring Cloud Finchley 版本,对应 Spring Cloud Alibaba 版本为 0.2.2.RELEASE。
    • 如果使用 Spring Cloud Edgware 版本,对应 Spring Cloud Alibaba 版本为 0.1.2.RELEASE。

      说明:Spring Cloud Edgware 版本将在 2019 年 8 月结束生命周期,不推荐使用这个版本开发应用。

  3. src\main\java下创建 Packagecom.aliware.edas

  4. 在 Packagecom.aliware.edas中创建nacos-config-example 的启动类 NacosConfigExampleApplication

    1. import org.springframework.boot.SpringApplication;
    2. import org.springframework.boot.autoconfigure.SpringBootApplication;
    3. @SpringBootApplication
    4. public class NacosConfigExampleApplication {
    5. public static void main(String[] args) {
    6. SpringApplication.run(NacosConfigExampleApplication.class, args);
    7. }
    8. }
  5. 在 Packagecom.aliware.edas中创建一个简单的 ControllerEchoController,自动注入一个属性userName,且通过@Value注解指定从配置中取 Key 为test.name的值。

    1. import org.springframework.beans.factory.annotation.Value;
    2. import org.springframework.cloud.context.config.annotation.RefreshScope;
    3. import org.springframework.web.bind.annotation.RequestMapping;
    4. import org.springframework.web.bind.annotation.RestController;
    5. @RestController
    6. @RefreshScope
    7. public class EchoController {
    8. @Value("${test.name}")
    9. private String userName;
    10. @RequestMapping(value = "/")
    11. public String echo() {
    12. return userName;
    13. }
    14. }
  6. src\main\resources路径下创建配置文件bootstrap.properties,在bootstrap.properties中添加如下配置,指定 Nacos Server 的地址。

    其中127.0.0.1:8848为 Nacos Server 的地址,18081为服务端口。

    如果您的 Nacos Server 部署在另外一台机器,则需要修改成对应的 IP 和端口。如果有其它需求,可以参照配置项参考bootstrap.properties文件中增加配置。

    1. spring.application.name=nacos-config-example
    2. server.port=18081
    3. 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。您可以根据您的实际情况选择将 Spring Cloud 应用部署到 ECS 集群、容器服务 Kubernetes集群或 EDAS Serverless。部署应用的详细步骤请参见部署应用概述

EDAS 集成的 ACM 即 Nacos 的商业化版本。当您将应用部署到 EDAS 的时候,EDAS 会通过优先级更高的方式去设置 Nacos 服务端地址和服务端口,以及 namespace、access-key、secret-key、context-path 信息。

  • 在部署应用前,需要在 EDAS 控制台的配置管理中新建和本地 Nacos Server 中相同的配置,具体操作步骤如下:

    1. 登录 EDAS 控制台。

    2. 在左侧导航栏中选择应用管理 > 配置管理

    3. 配置管理页面选择地域命名空间,然后在页面右侧单击新建配置图标

    4. 新建配置页面设置 Data IDGroup配置内容,然后单击发布

      • Data ID: nacos-config-example.properties

      • Group: DEFAULT_GROUP

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

  • 第一次部署建议是通过控制台部署,且如果使用 JAR 包部署,在创建应用时应用运行环境 务必选择 标准 Java 应用运行环境

    SC 应用运行环境选择

结果验证

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

  2. 执行命令curl http://<应用实例 IP>:<服务端口>,如curl http://192.168.0.34:8080 查看是否返回配置内容 nacos-config-test

  3. 在 EDAS 控制台将原有配置内容修改为 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 文档