在开发 Spring Cloud 应用时,您可以使用 Nacos (https://nacos.io)在本地实现 Spring Cloud 应用的配置管理。

前提条件

  • 登录 ACM控制台,并创建一个示例配置。

    • Data ID:com.alibaba.nacos.example.properties
    • Group:不填写,即使用默认的 DEFAULT_GROUP
    • 配置格式:Properties
    • 配置内容:connectTimeoutInMills=3000
  • (可选)下载样例工程

操作步骤

  1. 在 Maven 项目的 pom.xml 文件中增加以下配置来获取 Starter。
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        <version>${latest.version}</version>
    </dependency>
    说明 使用时请根据 Spring Boot 版本选择相应的 spring-cloud-starter-alibaba-nacos-config 版本。
    Spring Cloud Version Spring Cloud Alibaba Version Spring Boot Version
    Spring Cloud Hoxton 2.2.0.RELEASE 2.2.X.RELEASE
    Spring Cloud Greenwich 2.1.1.RELEASE 2.1.X.RELEASE
    Spring Cloud Finchley 2.0.1.RELEASE 2.0.X.RELEASE
    Spring Cloud Edgware 1.5.1.RELEASE 1.5.X.RELEASE
  2. bootstrap.properties 文件中配置连接信息。

    说明 请将代码中的 ${endpoint}${namespace}${accessKey}${secretKey} 分别替换为 ACM 控制台上命名空间详情对话框内的 End Point命名空间 IDAccessKeySecretKey。出于安全考虑,建议使用 RAM 用户的 AccessKey 和 SecretKey。
    spring.cloud.nacos.config.endpoint=${endpoint}
    spring.cloud.nacos.config.namespace=${namespace}
    # 推荐使用 RAM 用户的 accessKey 和 secretKey
    spring.cloud.nacos.config.access-key=${accessKey}
    spring.cloud.nacos.config.secret-key=${secretKey}
    # 配置的 Data ID 等于 ${spring.application.name}.${spring.cloud.nacos.config.file-extension}
    # 指定配置的 Data ID 前缀,例如:
    spring.application.name=com.alibaba.nacos.example
    # 指定配置的 Data ID 后缀,支持 properties、yaml、yml,默认为 properties
    spring.cloud.nacos.config.file-extension=properties
    # 指定 ACM 配置的 Group,默认为 DEFAULT_GROUP
    spring.cloud.nacos.config.group=DEFAULT_GROUP
    说明 ACM 配置的 Data ID 的约定格式为 ${spring.application.name}.${spring.cloud.nacos.config.file-extension}。本例中对应的 ACM 配置的 Data ID 为 com.alibaba.nacos.example.properties
  3. 使用 Spring 的注解 @Value 设置属性值,使用 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新。

    @RestController
    @RequestMapping("/config")
    @RefreshScope
    public class ConfigController {
    
        @Value("${connectTimeoutInMills:5000}")
        private int connectTimeoutInMills;
    
        public void setConnectTimeoutInMills(int connectTimeoutInMills) {
            this.connectTimeoutInMills = connectTimeoutInMills;
        }
    
        @RequestMapping(value = "/get", method = GET)
        @ResponseBody
        public int get() {
            return connectTimeoutInMills;
        }
    }

结果验证

  1. 在本地启动项目,并运行以下命令:

    curl localhost:8080/config/get

    若返回以下信息,则说明 SDK 可正常使用。

    3000
  2. 在 ACM 控制台将示例配置 com.alibaba.nacos.example.properties 更改为以下内容并发布。

    connectTimeoutInMills=6000

    若 Console 打印出更新的配置内容 ,则说明 SDK 的配置自动更新功能正常。

更多信息