动态配置

基于 Spring 开发的服务,会基于 application.yml 或 application.properties 进行服务配置,配置项的来源通常是环境变量。由于环境变量无法动态变更生效,所以修改配置之后需要通过重新部署服务来获取最新的配置,重新部署服务必然会使业务中断,必然会造成影响。为了有效解决服务重启更新配置的问题,配置中心提供了动态配置更新的解决方案,可以不用重新部署服务,秒级动态生效配置。

注意

基于配置中心的动态配置更新能力,并不仅限于 Java 语言、 Spring 框架使用,其他语言和框架也可以使用配置中心的 API 或者 SDK 进行接入使用。

配置中心底层基于 Nacos动态配置 - 图1 (opens new window) 实现,Nacos 是阿里巴巴的一款开源中间件。具体的使用方法如下:

dice.yml 中引用配置中心 Addon

  1. addons:
  2. config:
  3. plan: config-center:basic

修改 maven 的 pom.xml 文件

Spring-Boot 1.x 版本

  1. <dependency>
  2. <groupId>io.terminus.common</groupId>
  3. <artifactId>terminus-spring-boot-starter-configcenter</artifactId>
  4. <version>1.4.5.RELEASE</version>
  5. </dependency>

Spring-Boot 2.0.x 版本

  1. <dependency>
  2. <groupId>io.terminus.common</groupId>
  3. <artifactId>terminus-spring-boot-starter-configcenter</artifactId>
  4. <version>2.0.5.RELEASE</version>
  5. </dependency>

Spring-Boot 2.1.x版本

  1. <dependency>
  2. <groupId>io.terminus.common</groupId>
  3. <artifactId>terminus-spring-boot-starter-configcenter</artifactId>
  4. <version>2.1.0.RELEASE</version>
  5. </dependency>

使用 Spring Cloud Config 的 @RefreshScope 注解

获取配置的方式可以使用 @Value 或者 @ConfigurationProperties

  1. package io.terminus.erda.trial.demo.helloconfigcenter.controller;
  2. import org.springframework.beans.factory.annotation.Value;
  3. import org.springframework.cloud.context.config.annotation.RefreshScope;
  4. import org.springframework.web.bind.annotation.GetMapping;
  5. import org.springframework.web.bind.annotation.RestController;
  6. @RefreshScope
  7. @RestController
  8. public class HelloConfigCenterController {
  9. @Value("${demo.name:Bob}")
  10. private String name;
  11. @GetMapping("/hello")
  12. public String hello() {
  13. return "Hello! " + name;
  14. }
  15. }

配置中心控制台上进行动态配置修改

dice.yml 中引用了配置中心,服务部署成功后,服务插件菜单栏会出现配置中心的控制台入口。

动态配置 - 图2

进入配置中心控制台,即可进行配置项的修改等操作。

动态配置 - 图3

本地连线上配置中心

需要配置以下环境变量:

  • CONFIGCENTER_TENANT_NAME
  • CONFIGCENTER_TENANT_ID
  • CONFIGCENTER_ADDRESS
  • CONFIGCENTER_GROUP_NAME

具体取值,可以通过点击部署详情中的配置中心卡片,进入微服务治理页面,点击组件信息->配置中心进行查看