Config使用入门

2021-06-08  本文已影响0人  文景大大

一、为什么需要配置中心

在单体应用中,我们通常使用配置文件来保存应用需要的一些配置信息,但是在微服务架构中,服务都是分布式的,部署在多台机器上,如果想要更改某一个配置,就等对所有服务器的配置文件进行修改和重启,这个工作量和重启时间是不能接受的。因此,配置中心应运而生。

配置中心通常被用作集中管理不同环境下、不同集群下的配置信息,支持在修改配置后实时地更新推送到各个服务器上。SpringCloud Config是一个集中化的外部配置分布式系统,由服务端和客户端两个部分组成,不依赖注册中心,是一个独立的配置中心。SpringCloud Config支持多种存储配置信息的方式,比如jdbc、svn、git等,这里以git为例进行讲解。

二、Config Server服务端的配置

2.1 config仓库的创建

首先我们需要创建一个git仓库,用来存储配置的内容,比如下面这个目录:

config配置的git仓库

其中config-git是文件夹名称,sc-config是仓库名称,server-info是仓库中的一个目录文件,其下包含dev、stg、prd三个配置文件,其中的内容各自是:

dev:cn.springcloud.book.config=dev

stg:cn.springcloud.book.config=stg

prd:cn.springcloud.book.config=prd

然后我们需要将修改的内容提交并推送到远程git仓库,这里省略该步骤。

2.2 config server项目的创建

从start.sping.io上一键下载config服务端项目:

一键生成config-server项目

然后在启动类上加上@EnableConfigServer注解,表示开启SpringCloud Config的服务功能。

最后在修改配置文件application.propertis如下:

spring.application.name=config-server
server.port=9090

# 指定远程仓库地址
spring.cloud.config.server.git.uri=https://gitee.com/zhangxun165/sc-config.git
spring.cloud.config.server.git.username=zhangxun165
spring.cloud.config.server.git.password=**********
# 指定需要在仓库下的那个目录文件中查找配置文件
# 可以同时添加多个目录,相互之间用逗号隔开
spring.cloud.config.server.git.search-paths=server-info

然后我们就可以启动项目了。此时访问如下的URL就能获得对应环境的配置内容:

http://localhost:9090/config-info/dev/master

dev环境的配置信息

关于访问路径:

三、Config Client客户端的配置

3.1 config client项目的创建

同样,先从start.spring.io上一键下载包含config client的项目:

一键生成config-client项目

踩坑经验:本实例springcloud版本是2020.0.3,需要再手动引入如下的maven依赖,否则client会启动报错:No spring.config.import property has been defined,引入内容如下:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

然后我们创建一个远程config实体类,用于表示远程配置中心上的配置内容:

@Component
@ConfigurationProperties(prefix = "cn.springcloud.book")
public class ConfigInfoProperties {

    private String config;

    public String getConfig() {
        return config;
    }

    public void setConfig(String config) {
        this.config = config;
    }
}

由于远程仓库中的配置内容是这样的cn.springcloud.book.config=dev,所以需要配置前缀,使得属性config比较简单。

为了从客户端获取远程配置中心的配置内容,我们可以再创建一个接口Controller:

@RestController
public class ConfigController {

    @Autowired
    private ConfigInfoProperties configInfo;

    @GetMapping("/getConfig")
    public String getConfig(){
        return configInfo.getConfig();
    }

}

最后,application.properties配置文件如下:

server.port=9091
spring.application.name=config-client-demo

还有bootstrap.properties配置文件如下:

# 表示要请求Git仓库的哪个分支
spring.cloud.config.label=master
# config server的地址
spring.cloud.config.uri=http://localhost:9090
# 配置文件名称前缀
spring.cloud.config.name=config-info
# 配置文件环境profile信息
spring.cloud.config.profile=dev

到此,springcloud config client的实例就搭建好了,先启动server端,再启动client端,访问http://localhost:9091/getCofig就可以获取dev环境的配置内容了。

然而,如果我们在git仓库中修改了配置内容,config server是能够立即获取到最新的内容的,但是config cllient却需要重启之后才可以。如何免重启获取最新的配置内容,后面文章再讲解。

上一篇下一篇

猜你喜欢

热点阅读