配置管理

最近更新时间:2024-01-25 16:42:12

我的收藏

操作场景

本文介绍在本地开发 Java 应用,通过 SpringCloud 的方式接入 TSE 治理中心(北极星网格),使用配置管理功能。

前提条件

1. 在开始开发前,请确保您已经参见 下载 Maven下载安装了 Java 和 Maven。
2. 已创建 TSE 治理中心(北极星网格)实例,操作步骤详细参见 引擎管理

操作步骤

步骤1:引入配置管理依赖

1.1 引入 spring cloud tencent 依赖

修改应用根目录下的 pom.xml,添加dependencyManagement
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.tencent.cloud</groupId>
<artifactId>spring-cloud-tencent-dependencies</artifactId>
<version>${version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
注意:
请根据项目 Spring Boot 和 Spring Framework 的版本,选择合适的 Spring Cloud Tencent 版本

1.2 引入 spring cloud tencent starter

方式一:只引入spring-cloud-starter-tencent-polaris-config
<dependency>
<groupId>com.tencent.cloud</groupId>
<artifactId>spring-cloud-starter-tencent-polaris-config</artifactId>
</dependency>
方式二:通过spring-cloud-starter-tencent-all引入 sct 所有 starters。
<dependency>
<groupId>com.tencent.cloud</groupId>
<artifactId>spring-cloud-starter-tencent-all</artifactId>
<!-- 注意需要指定 type=pom-->
<type>pom</type>
</dependency>
如果使用 Spring Cloud 2021 版本,还需要添加如下依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

步骤2:增加配置文件

注意:
应用启动强依赖配置,所以 Spring Cloud Config 是在 Bootstrap阶段加载配置文件,所以需要把北极星相关的配置放在bootstrap.yml里。
bootstrap.yml核心配置内容为配置北极星服务端地址以及注入的配置文件信息。

2.1 配置 Polaris(北极星) 配置中心地址

1. 在项目的 main/resources 目录下创建 bootstrap.yml 文件。
2. 在 bootstrap.yml 文件中配置应用名、polaris(北极星)服务端地址等信息。服务端地址详细参见:引擎管理 > 客户端访问地址
如果北极星配置中心和注册中心是同一套北极星集群,则只需配置spring.cloud.polaris.address即可。
如果部署了两套北极星集群,分别用于注册中心和配置中心,则需配置spring.cloud.polaris.address用于指定注册中心集群的地址,配置spring.cloud.polaris.config.address用于指定配置中心的地址。如下所示:
spring:
application:
name: ${application.name}
cloud:
polaris:
address: grpc://${修改为 Polaris 服务地址}:8091 # 必填
namespace: default # 全局 namespace 参数
config:
address: grpc://${独立的配置中心}:8093 # 选填,只有在配置中心和注册中心是两个不同的地址时才需要配置
auto-refresh: true # 选填,当配置发布后,动态刷新 Spring 上下文,默认值为 true

2.2 注入配置文件

我们推荐的最佳实践是在北极星管控端创建一个名为当前应用名${spring.application.name}的配置分组,Spring Cloud Tencent Config 会自动注入当前应用名分组下的:
application-${activeProfile}.properties
application-${activeProfile}.yml
application-${activeProfile}.yaml
application.properties
application.yml
application.yaml
bootstrap-${activeProfile}.properties
bootstrap-${activeProfile}.yml
bootstrap-${activeProfile}.yaml
bootstrap.properties
bootstrap.yml
bootstrap.yaml
说明:
加载顺序依次从上到下,即越先加载的配置,优先级越高。与此同时,远端配置优先级大于本地配置优先级。优先级高的配置覆盖优先级低的配置。
自动注入以上配置文件符合 Spring Boot 的规范,能够满足绝大部分应用场景了。只有当您需要注入额外自定义的配置文件时,才需要在yml里配置 spring.cloud.polaris.config.groups,如下所示:
spring:
cloud:
polaris:
config:
groups:
- name: ${spring.application.name} # 选填,注入自定义配置的配置分组
files: [ "config/application.properties", "config/bootstrap.yml" ] # 注入自定义配置文件列表,当 key 冲突时,排在前面的配置文件优先级高于后面

步骤3:在代码中使用配置

用户可通过两种方式更新代码中的配置信息:使用配置类@ConfigurationProperties@Value注解。
@Value 比较适用于配置比较少的场景
@ConfigurationProperties 则更适用于有较多配置的情况
1. 通过 @Value注入
@Value("${timeout:1000}")
private int timeout;
2. 通过 @ConfigurationProperties注入
@Component
@ConfigurationProperties(prefix = "teacher")
@RefreshScope //如果使用反射模式,则不需要加这个注解
public class Person {

private String name;

private int age;

String getName() {
return name;
}

void setName(String name) {
this.name = name;
}

int getAge() {
return age;
}

void setAge(int age) {
this.age = age;
}

@Override
public String toString() {
return "User{" + "name='" + name + '\\'' + ", age=" + age + '}';
}

}.

步骤4:在北极星控制台添加配置文件

命名空间为北极星里核心的概念,通过命名空间逻辑隔离资源,例如通常用于标识不同的环境、不同的集群。
注意:
这里的命名空间需要和应用配置中的命名空间保持一致。
北极星的配置文件分组概念为一组配置文件的集合,推荐把应用名作为一个分组名,例如在我们的示例中,新建一个polaris-config-example的分组。 把polaris-config-example应用的配置文件都放在polaris-config-example分组下,这样便于配置管理。
北极星配置中心的控制台,配置文件名可以通过“/”来按树状目录结构展示,树状结构可以清晰的管理配置文件。例如一个应用下分不同的模块,每个模块都有独立的一组配置文件,则可以创建module1/file1.properties,module1/file2.yaml,module2/file3.yaml
注意:
配置文件名强烈建议带文件后缀,例如 .properties .yaml .yml .json 等。因为客户端会通过文件名后缀来解析文件内容,如果客户端发现不认识的后缀名则默认当做 .properties 文件处理。
配置好的实例如下图所示:


步骤5:启动应用

到此接入 Spring Cloud Tencent Config 即已完成。

步骤6:动态刷新配置

说明:
Spring Cloud Tencent 1.7.0之前的版本通过 Spring Cloud 标准的@RefreshScope实现配置动态刷新。@RefreshScope存在以下局限性:
每次刷新配置,需要重新构建整个Spring Context重建 Bean。
代码里层面需要引入@RefreshScope注解。
1.7.1 及之后版本,Spring Cloud Tencent 优化了动态刷新的实现方式,建议您使用最新版本。

6.1 刷新 @Value 属性

应用启动时扫描所有的 Bean,构建 @Value属性对应的 Bean 的映射关系。当属性配置更新时,找到所有的待更新的 Bean 并利用 Java 的反射机制更新属性。

6.2 刷新 @ConfigurationProperties 配置类

相比于 @RefreshScope 重建所有的 Bean,优化之后的刷新机制只需要重建更新的配置对应的 @ConfigurationProperties Bean,影响面更小。实现原理请看PolarisRefreshAffectedContextRefresherAffectedConfigurationPropertiesRebinder
如果您想使用传统的@RefreshScope方式刷新配置,可以配置spring.cloud.polaris.config.refresh-type=refresh_context

6.3 关闭动态刷新能力

bootstrap.yml里配置spring.cloud.polaris.config.auto-refresh=false