操作场景
本文介绍在本地开发 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>
注意:
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;}@Overridepublic String toString() {return "User{" + "name='" + name + '\\'' + ", age=" + age + '}';}}.
步骤4:在北极星控制台添加配置文件
1. 创建命名空间
命名空间为北极星里核心的概念,通过命名空间逻辑隔离资源,例如通常用于标识不同的环境、不同的集群。
注意:
这里的命名空间需要和应用配置中的命名空间保持一致。
2. 创建配置文件分组
北极星的配置文件分组概念为一组配置文件的集合,推荐把应用名作为一个分组名,例如在我们的示例中,新建一个
polaris-config-example
的分组。 把polaris-config-example
应用的配置文件都放在polaris-config-example
分组下,这样便于配置管理。3. 创建并发布配置文件
北极星配置中心的控制台,配置文件名可以通过“/”来按树状目录结构展示,树状结构可以清晰的管理配置文件。例如一个应用下分不同的模块,每个模块都有独立的一组配置文件,则可以创建
module1/file1.properties
,module1/file2.yaml
,module2/file3.yaml
。注意:
配置文件名强烈建议带文件后缀,例如 .properties .yaml .yml .json 等。因为客户端会通过文件名后缀来解析文件内容,如果客户端发现不认识的后缀名则默认当做 .properties 文件处理。
配置好的实例如下图所示:
![](https://qcloudimg.tencent-cloud.cn/image/document/625efc063a38993c754e3ec7e3330f8f.png)
步骤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
,影响面更小。实现原理请看PolarisRefreshAffectedContextRefresher
和AffectedConfigurationPropertiesRebinder
。如果您想使用传统的
@RefreshScope
方式刷新配置,可以配置spring.cloud.polaris.config.refresh-type=refresh_context
。6.3 关闭动态刷新能力
在
bootstrap.yml
里配置spring.cloud.polaris.config.auto-refresh=false
。