美文网首页
Config使用入门

Config使用入门

作者: 文景大大 | 来源:发表于2021-06-08 16:28 被阅读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-info是配置文件名称前缀;
    • dev/stg/prd是配置文件名称中表示环境信息的;
    • master表示分支版本,默认不写为master;

    三、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却需要重启之后才可以。如何免重启获取最新的配置内容,后面文章再讲解。

    相关文章

      网友评论

          本文标题:Config使用入门

          本文链接:https://www.haomeiwen.com/subject/bumzsltx.html