配置中心 Spring Cloud Config 详解: 配置服务端

举报
溜溜丽 发表于 2021/06/01 15:48:25 2021/06/01
【摘要】 《配置中心 Spring Cloud Config 详解》系列文章更新,一起在技术的路上精进!本系列文章将会介绍Spring Cloud 中提供了分布式配置中心Spring Cloud Config。应用服务中除了实现系统功能的代码,还需要连接资源和其它应用,经常有很多需要在外部配置的数据去调整应用的行为,如切换不同的数据库,设置功能开关等。随着微服务的不断增加,需要系统具备可伸缩和可扩展性...

《配置中心 Spring Cloud Config 详解》系列文章更新,一起在技术的路上精进!本系列文章将会介绍Spring Cloud 中提供了分布式配置中心Spring Cloud Config。应用服务中除了实现系统功能的代码,还需要连接资源和其它应用,经常有很多需要在外部配置的数据去调整应用的行为,如切换不同的数据库,设置功能开关等。随着微服务的不断增加,需要系统具备可伸缩和可扩展性,除此之外就是管理相当多的服务实例的配置数据。在应用的开发阶段由各个服务自治,但是到了生产环境之后会给运维带来很大的麻烦,特别是微服务的规模比较大,配置的更新更为麻烦。为此,系统需要建立一个统一的配置管理中心。

前文回顾

在前面的文章,我们介绍了 Spring Cloud Config 的基本功能以及客户端实现的具体内容。本文将会介绍 Spring Cloud Config 服务端实现。

配置服务端

1. pom中的jars

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-server</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    </dependency>
</dependencies>

jar包主要引入了服务发现consul,将配置服务注册到consul上面,另外就是spring-cloud-config-server。

2. 入口类

服务端为外部配置(键值对或者与YAML相似的内容格式)提供了HTTP API接口。使用@EnableConfigServer注解,基于Spring Boot的应用很容易内置使用。

@SpringBootApplication
@EnableDiscoveryClient
@EnableConfigServer
public class ConfigServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(CloudApplication.class, args);
    }
}

3. 启动类配置文件

server:
  port: 8888
spring:
  application:
    name: config-server
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        ip-address: localhost
        port: ${server.port}
        instance-id: config-server-${server.port}
        service-name: config-server
---
spring:
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/keets/Config-Repo.git
          searchPaths: ${APP_LOCATE:dev}
          username: user
          password: password

服务端的配置信息也是主要有服务发现和配置仓库的配置信息。spring.cloud.config.server.git.uri对应配置git仓库地址;spring.cloud.config.server.git.searchPaths对应配置仓库路径,这里我们指定了dev文件夹,区分了不同的部署环境;spring.cloud.config.server.git.username对应访问git仓库的用户名;spring.cloud.config.server.git.password对应访问git仓库的用户密码;如果是私有配置仓库的话,需要配置用户名和密码,也支持ssh的安全秘钥模式,否则不需要添加。上面的配置中使用了私有库,并且使用了用户名密码登录的模式。

验证服务端配置

配置服务端启动后,可以看到其拉取的git仓库中的配置信息。目前在git仓库只有config-client的配置,对应于config-client-dev.yml。

Located property source: CompositePropertySource [name='configService', propertySources=[MapPropertySource {name='configClient'}, MapPropertySource {name='https://gitee.com/keets/Config-Repo.git/dev/config-client-dev.yml#dev'}]]
2018-01-10 20:01:35.367  INFO 25897 --- [nio-8000-exec-1]

Spring Cloud Config服务端负责将git中存储的配置文件发布成REST接口,所以在建好配置仓库和配置服务器之后,已经可以验证服务端能否正常提供接口。我们根据上面端点的对应规则,请求http://localhost:8888/config-client/dev,得到如下结果。

{
    "name": "config-client",
    "profiles": [
        "dev"
    ],
    "label": "master",
    "version": "c5b6f3f78a0b3492a9ad01df212347839197e2e2",
    "state": null,
    "propertySources": [
        {
            "name": "https://gitee.com/keets/Config-Repo.git/dev/config-client-dev.yml#dev",
            "source": {
                "spring.profiles": "dev",
                "cloud.version": "Camden SR7"
            }
        }
    ]
}

上面返回的结果显示了应用名、profile、git版本、配置文件的URL以及配置内容等信息。根据我们上面的讲解,配置内容还可以通过http://localhost:8888/config-client-dev.yml端点获取。

配置验证

下面我们验证一下,客户端是否能够正常获取配置。这需要客户端增加API接口,并且提交客户端的配置文件到配置仓库中。

客户端增加API接口

在上面客户端的基础上,我们增加一个API端点接口,端点很简单,用来请求cloud.version的值。

@RestController
@RequestMapping("/cloud")
public class TestController {

    @Value("${cloud.version}")
    private String version;

    @GetMapping("/version")
    public String version() {
        return version;
    }
}

获取配置

启动配置服务端和客户端,可以使用POSTMAN或者浏览器等工具验证,客户端是否正确获取了配置信息。

图片.png

从上图可以看出,config-client已经正常获取了配置信息。当我们提交了配置文件之后,最简单的方法就是重启服务以重新获取配置。客户端并不能主动感知到配置的变化,从而主动去获取新的配置。

小结

本文主要介绍了 Spring Cloud Config 示例的服务端实现,服务端提供客户端启动所必须的配置信息。当然,配置中心的功能远比这些功能要丰富,我们接下来将会看看 Spring Cloud Config 的一些高级用法。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。