在開發 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 的配置自動更新功能正常。

更多信息