首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用Spring Cloud Config 2024.0.0一分钟快速搭建服务配置中心和获取配置的客户端,它和老版本有什么不同?

在我们的日常开发中,经常需要对数据库的连接配置、第三方接口的对接密钥等重要数据进行管理。

同时呢,开发环境、测试环境、生产环境,环境不同,配置也是不一样的,在不同的环境使用不同的配置,这也需要对不同环境的配置进行单独管理。

Spring-Cloud为我们提供了配置管理的微服务框架 Spring Cloud Config,正好解决了这个棘手的问题。

这个框架也不是新框架了,本篇文章使用 JDK17、Spring-Boot3.4.3 代替以前使用的JDK8、SpringBoot2.1.4.release版本,把这个框架重新过一遍,看看有什么变化。

一、什么是 Spring Cloud Config?

Spring Cloud Config 是一个用于集中式配置管理的框架,它可以将所有微服务的配置信息统一存储和管理。

这样,所有的微服务都可以从配置中心获取到相应的配置信息,并且支持动态刷新配置,避免了每次修改配置后都需要重启服务的麻烦。

本次使用的spring-cloud-dependencies版本为2024.0.0:

  <groupId>org.springframework.cloud</groupId>

  <artifactId>spring-cloud-dependencies</artifactId>

  <version>2024.0.0</version>

  <type>pom</type>

  <scope>import</scope>

二、搭建 Spring Cloud Config 服务中心

配置服务中心是 Spring Cloud Config 的核心,它负责存储和管理微服务的配置信息。

我们将搭建一个 Spring Boot 应用来作为配置服务中心(Config Server)。

1、建立一个SpringBoot项目,打开pom.xml文件,确认包含以下依赖:

<!-- Spring Cloud Config Server依赖 -->

  <groupId>org.springframework.cloud</groupId>

  <artifactId>spring-cloud-config-server</artifactId>

2、在项目的主类中,添加@EnableConfigServer注解来启用配置服务功能:

package com.example.configserver;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.config.server.EnableConfigServer;

@SpringBootApplication

@EnableConfigServer  // 启用 Spring Cloud Config Server

public class ConfigServerApplication {

  public static void main(String[] args) {

      SpringApplication.run(ConfigServerApplication.class, args);

  }

}

3、配置application.properties文件,指定端口号和配置文件位置:

server.port=8800 # 设置服务中心的端口

spring.application.name=config-server # 配置服务名称

spring.profiles.active=native # 配置文件本项目中

spring.cloud.config.server.native.search-locations=classpath:/config

我把配置放在了本项目里,配置文件具体位置在src/main/resources的config目录下。

项目结果图如下:

在config 这个文件里,我定义了两个配置,一个指向开发环境,一个指向生产环境。

三、搭建 Spring Cloud Config 客户端

客户端是需要从配置服务中心获取配置信息的应用。

我们将创建一个 Spring Boot 项目作为配置客户端(Config Client),它会从配置服务中心加载配置信息。

1、创建一个SpringBoot 项目,打开pom.xml文件,确认它包含以下依赖:

  <groupId>org.springframework.cloud</groupId>

  <artifactId>spring-cloud-config-client</artifactId>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-configuration-processor</artifactId>

  <optional>true</optional>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-bootstrap</artifactId>

在 Spring-Cloud 2020.0.x 就不再支持主动加载 bootstrap.properties 文件,如果想主动加载这个文件,就需要引入 spring-boot-configuration-processor 框架。

如果不加入这个框架,在启动项目时会报错:

No spring.config.import property has been defined

Action:

Add a spring.config.import=configserver: property to your configuration.

If configuration is not required add spring.config.import=optional:configserver: instead.

To disable this check, set spring.cloud.config.enabled=false or spring.cloud.config.import-check.enabled=false.

spring-boot-configuration-processor 框架是在IDE提示下加的,它有什么作用呢?

在编译过程中,spring-boot-configuration-processor 会自动生成 META-INF/spring-configuration-metadata.json 文件。这个文件包含了 Spring Boot 配置类的所有属性及其描述信息,例如每个属性的类型、默认值、合法值等。这个文件有助于 IDE(如 IntelliJ IDEA 和 Eclipse)在开发过程中提供自动补全和智能提示。

只要我们在类中使用了 @ConfigurationProperties 配置,IDE中就会提示我们添加这个框架。

另外,配置类可以通过 @Validated 注解进行校验,而 spring-boot-configuration-processor 也能帮助 IDE 更好地识别和校验配置属性。

2、配置application.properties文件,给客户端指定端口号:

server.port=8101# 设置客户端服务的端口

spring.application.name=api # 客户端服务名称

3、配置bootstrap.properties文件,指向配置中心服务器:

#指向配置服务的ip地址

spring.cloud.config.uri=http://127.0.0.1:8800

#获取开发环境的配置

spring.cloud.config.profile=dev

4、创建一个控制器来获取配置文件中的属性:

package com.example.configclient;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

publicclass ConfigController {

  @Value("${my.config.property}")

  private String myConfigProperty;

  @GetMapping("/config")

  public String getConfig() {

      return"配置属性值: " + myConfigProperty;

  }

}

在这个控制器中,@Value注解将会从配置服务中心加载名为my.config.property的配置属性。

四、验证配置的获取

1、启动配置服务中心的主类

2、启动客户端的主类

3、访问http://localhost:8101/config

五、客户端获取配置的两种方式

1、通过固定ip地址获取配置服务器地址

#指向配置服务的ip地址

spring.cloud.config.uri=http://127.0.0.1:8800

这种方式适合ip地址固定的项目。

2、通过服务发现

# 开启服务发现功能

spring.cloud.config.discovery.enabled=true

#指向配置服务中心的名称

spring.cloud.config.discovery.service-id=config-center

如果我们使用了服务发现功能,就可以通过服务名称获取配置,这样就可以不关心ip地址动态获取配置服务中心的配置了。

这种方式适合集成了服务发现功能的集群项目。

五、最后总结

通过以上两个简单的项目,我们使用 Spring Cloud Config 框架成功地搭建了配置服务中心(Config Server)和配置客户端(Config Client)的基础功能。

对比老版本,确实有新变化,比如对 bootstrap.properties 配置文件的读取,原来默认支持获取,现在需要添加额外框架读取。

时间有限,至于其他变化还需要在使用中逐一发现。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OexwUHQJ0zGoCXUR27MTZxMA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券