本文以Nacos配置管理的Demo应用为例,介绍如何在本地开发、调试Spring Cloud应用,使用Spring Cloud Alibaba Nacos Config实现配置管理,并通过SAE进行配置管理与推送。
前提条件
在开发前,确保您已完成以下工作:
- 下载Maven并设置环境变量。具体信息,请参见设置环境变量。
- 启动Nacos Server。
- 下载并解压Nacos Server。
- 进入nacos/bin目录,启动Nacos Server。
- Linux、Unix、macOS系统:执行命令
sh startup.sh -m standalone
。 - Windows系统:执行命令
startup.cmd -m standalone
。
说明standalone
表示单机模式运行,非集群模式。startup.cmd文件默认以集群模式启动,因此您在使用Windows系统时,如果直接双击执行startup.cmd文件会导致启动失败,此时需要在startup.cmd文件内设置MODE="standalone"
。 更多信息,请参见Nacos快速开始。 - Linux、Unix、macOS系统:执行命令
- 在本地Nacos Server控制台新建配置。
- 登录本地Nacos Server控制台(用户名和密码均默认为
nacos
)。 - 在左侧导航栏,单击配置列表,在配置列表页面右上角,单击
图标。
- 在新建配置页面,输入以下参数,并单击发布。
- Data ID:nacos-config-example.properties
- Group:DEFAULT_GROUP
- 配置内容:test.name=nacos-config-test
- 登录本地Nacos Server控制台(用户名和密码均默认为
背景信息
在开发Spring Cloud应用时,您可以在本地使用Nacos实现应用的配置管理。由于SAE集成Nacos的应用配置管理ACM的开源版本,在应用部署到SAE后,您可以通过SAE对应用进行配置的管理和推送。
本文以Spring Cloud应用开发过程为例,使用Spring Cloud Alibaba Nacos Config实现配置管理。您可以下载该应用示例的Demo进行操作。
步骤一:使用Nacos Config实现配置管理
- 创建一个Maven工程,命名为nacos-config-example。
- 在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版本的生命周期已结束,不推荐使用这个版本开发应用。 - 在src\main\java下,创建Package
com.aliware.edas
。 - 在Package
com.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); } }
- 在Package
com.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; } }
- 在
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
- 执行
NacosConfigExampleApplication
中的main函数,启动应用。
步骤二:部署到SAE
在本地完成应用的开发和测试后,您可以将应用程序部署到SAE。具体操作,请参见应用托管概述。
- SAE配置管理中心提供正式商用版本的Nacos Server。当您将应用部署到SAE时,SAE会通过优先级更高的方式去设置Nacos Server服务端地址和服务端口,以及namespace、access-key、secret-key和context-path信息。您无需进行任何额外的配置,原有的配置内容可以选择保留或删除。
- 您初次在SAE控制台进行部署时,如果选择JAR包部署,在创建应用时,应用运行环境必须选择标准Java应用运行环境。
在部署应用前,请使用SAE的配置管理功能,创建与本地Nacos Server中相同的应用配置。
- 登录SAE控制台。
- 在左侧导航栏,选择分布式配置管理>配置列表,然后在顶部菜单栏选择地域。
- 在配置列表页面,选择命名空间并单击创建配置。
- 在创建配置面板,配置相关参数,单击创建。
配置项 说明 Data ID 配置ID,以nacos-config-example.properties为例。 采用类似
package.class
(如com.taobao.tc.refund.log.level
)的命名规则保证全局唯一性。建议根据配置的业务含义定义class部分。Group 配置分组(命名空间),以DEFAULT_GROUP为例。 建议填写
产品名:模块名
(如ACM:Test
)保证唯一性。后续可以根据Group进行鉴权。数据加密 配置数据是否加密。如果您的配置中包含敏感数据,建议您使用加密存储功能,降低配置泄漏风险。 重要 ACM数据加密功能依赖密钥管理服务,因此使用前必须开通密钥管理服务,并授权ACM使用密钥管理服务进行加解密。加密配置的Data ID均以cipher-开头,具体操作,请参见创建和使用加密配置。配置格式 选择配置格式,以TEXT为例。 配置内容 输入配置的内容,以test.name=nacos-config-test为例。 配置描述 配置描述信息,便于理解配置含义。 更多配置 应用 配置归属的应用名称。 标签 配置标签。方便您根据自己的维度管理配置,最多支持5个标签。
步骤三:结果验证
部署完成后,您可以通过查看日志确认应用是否启动成功。
- 执行命令
curl http://<应用实例 IP>:<服务端口>
。例如curl http://192.168.0.34:8080
,查看是否返回配置内容nacos-config-test
。 - 登录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文档。