我们前面接触到的spring cloud组件都是基于Netflix的组件进行实现的,这次我们来看下spring cloud 团队自己创建的一个全新项目:Spring Cloud Config.
它用来为分布式系统中的基础设施和微服务提供集中化的外部配置支持,分为服务端和客户端两个部分。

其中服务端也称为分布式配置中心,他是独立的微服务应用,用来连接配置仓库并为客户端提供获取接口(这些接口返回配置信息、加密、解密信息等);

客户端是微服务架构中的各个微服务应用或基础设施,它们通过制定的配置中心来管理应用资源与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息。
由于配置中心默认采用Git来存储配置信息,因此我们会用到Git相关的内容,如果没有用过Git或者忘记怎么用了,可以参考下廖雪峰老师的Git教程
另外,我自己用的Git远程仓库是码云。
====================华丽的分割线===================
接下来看下代码怎么实现。

一、准备远程Git仓库

  1. 在Gitee上新建一个项目https://gitee.com/sam-uncle/spring-cloud-learning
  2. 在项目下新建子目录spring-cloud-config-file,然后新建三个文件
    1.   
    2. 内容分别是from=git-dev-1.0、from=git-test-1.0、from=git-1.0
  3. 新建一个分支config-lable-test,新分支里面新建三个同名的文件,不过内容分别是from=git-dev-2.0、from=git-test-2.0、from=git-2.0

二、构建配置中心

  先给出最终代码结构:

  

  搭建过程如下:

  1. 新建maven工程config-server
  2. 修改POM文件
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.sam</groupId>
    <artifactId>config-server</artifactId>
    <version>0.0.1-SNAPSHOT</version> <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.1.RELEASE</version>
    </parent> <properties>
    <javaVersion>1.8</javaVersion>
    </properties>
    <!-- 使用dependencyManagement进行版本管理 -->
    <dependencyManagement>
    <dependencies>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>Camden.SR6</version>
    <type>pom</type>
    <scope>import</scope>
    </dependency>
    </dependencies> </dependencyManagement> <dependencies>
    <!-- 引入config server依赖 -->
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
    </dependency> </dependencies> </project>
  3. 创建启动类
    /**
    * @EnableConfigServer
    *
    * 开启Spring Cloud Config 的服务端功能
    *
    */
    @SpringBootApplication
    @EnableConfigServer
    public class ConfigServerApp { public static void main(String[] args) {
    SpringApplication.run(ConfigServerApp.class, args);
    }
    }
  4. 配置application.properties文件,指定远程仓库信息
    server.port=7001
    spring.application.name=config-server #配置Git仓库的地址
    spring.cloud.config.server.git.uri=https://gitee.com/sam-uncle/spring-cloud-learning/
    #配置仓库路径下的相对搜索位置,可以配置多个
    spring.cloud.config.server.git.search-paths=spring-cloud-config-file
    #这里配置你的Git仓库的用户名
    spring.cloud.config.server.git.username=用户名
    #这里配置你的Git仓库的密码
    spring.cloud.config.server.git.password=密码
  5. 启动并验证

    访问配置信息的URL与配置文件的映射关系如下:

    • /{application}/{profile} [/{label}]
    • /{application}-{profile}.yml
    • /{label}/{application}-{profile}.yml
    • /{application}-{profile}.properties
    • /{label}/{appliction}-{profile}.properties

    上面的url会映射{application}-{profile}.properties对应的配置文件,其中{label}对应Git上不同的分支,默认是master。

    通过浏览器访问http://localhost:7001/sam/dev/config-label-test,结果如下:

    

三、实现客户端

    最终代码结构:

  

  搭建过程如下:

  1. 新建maven工程config-client
  2. 修改POM文件
    <project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.sam</groupId>
    <artifactId>config-client</artifactId>
    <version>0.0.1-SNAPSHOT</version> <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.1.RELEASE</version>
    </parent> <properties>
    <javaVersion>1.8</javaVersion>
    </properties>
    <!-- 使用dependencyManagement进行版本管理 -->
    <dependencyManagement>
    <dependencies>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>Camden.SR6</version>
    <type>pom</type>
    <scope>import</scope>
    </dependency>
    </dependencies> </dependencyManagement> <dependencies>
    <!-- 引入config依赖 -->
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency> </dependencies> </project>
  3. 创建启动类
    @SpringBootApplication
    public class ConfigClientApp { public static void main(String[] args) {
    SpringApplication.run(ConfigClientApp.class, args);
    } }
  4. 配置bootstrap.properties文件,指定config-server位置
    server.port=7002
    #{application}
    spring.application.name=sam
    #{profile}
    spring.cloud.config.profile=dev
    #{label}
    spring.cloud.config.label=master #config server uri
    spring.cloud.config.uri=http://localhost:7001/
  5. 创建controller
    @RefreshScope
    @RestController
    public class TestController { /**
    * 通过@Value 来讲配置文件中的值写入到代码中
    */
    @Value("${from}")
    private String from; @RequestMapping("/from")
    public String from() {
    return from;
    }
    }
  6. 启动并测试

    

四、工作原理
Spring Cloud Config配置中心的工作原理如下:

  1. 客户端启动时,根据bootstrap.properties中配置的应用名{application}、环境名{profile}、分支名{label},向Config Server请求获取配置信息。
  2. Config Server根据自己维护的Git仓库信息和客户传递过来的配置定位信息去查找配置信息。
  3. 通过git clone命令将找到的配置信息下载到本地(Config Server的文件系统中)。在通过页面访问或启动客户端的时候,我们在服务端能看到如下下载的log:
    -- ::58.055  INFO  --- [nio--exec-] o.s.c.c.s.e.NativeEnvironmentRepository  : Adding property source: file:/C:/Users/sam/AppData/Local/Temp/config-repo-/spring-cloud-config-file/sam-dev.properties
    -- ::58.055 INFO --- [nio--exec-] o.s.c.c.s.e.NativeEnvironmentRepository : Adding property source: file:/C:/Users/sam/AppData/Local/Temp/config-repo-/spring-cloud-config-file/sam.properties
  4. Config Server创建Spring 的ApplicationContext实例,并从Git本地仓库中加载配置文件,最后将这些配置内容读取出来返回给客户端。
  5. 客户端在获取外部配置信息后加载到客户端的applicationContext实例。

spring cloud 入门系列七:基于Git存储的分布式配置中心--Spring Cloud Config的更多相关文章

  1. spring cloud 入门系列七:基于Git存储的分布式配置中心

    我们前面接触到的spring cloud组件都是基于Netflix的组件进行实现的,这次我们来看下spring cloud 团队自己创建的一个全新项目:Spring Cloud Config.它用来为 ...

  2. 【SpringCloud】第七篇: 高可用的分布式配置中心(Spring Cloud Config)

    前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...

  3. 史上最简单的SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)

    上一篇文章讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当服务实例很多时,都从配置中心读取文件,这时可以考虑将配置中心做成一个微服务,将其集群化,从而达到高可用,架构图如 ...

  4. SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)(Finchley版本)

    上一篇文章讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当服务实例很多时,都从配置中心读取文件,这时可以考虑将配置中心做成一个微服务,将其集群化,从而达到高可用,架构图如 ...

  5. SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)

    版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接 ,博主地址:http://blog.csdn.net/forezp. http://blog.csdn.net/forezp/art ...

  6. SpringCloud学习(七)高可用的分布式配置中心(Spring Cloud Config)(Finchley版本)

    上一篇文章讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当服务实例很多时,都从配置中心读取文件,这时可以考虑将配置中心做成一个微服务,将其集群化,从而达到高可用 准备工作 ...

  7. 一起来学Spring Cloud | 第七章:分布式配置中心(Spring Cloud Config)

    上一章节,我们讲解了服务网关zuul,本章节我们从git和本地两种存储配置信息的方式来讲解springcloud的分布式配置中心-Spring Cloud Config. 一.Spring Cloud ...

  8. Spring Cloud Config(一):聊聊分布式配置中心 Spring Cloud Config

    目录 Spring Cloud Config(一):聊聊分布式配置中心 Spring Cloud Config Spring Cloud Config(二):基于Git搭建配置中心 Spring Cl ...

  9. 第六篇: 分布式配置中心(Spring Cloud Config)

    一.简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件. 在Spring Cloud中,有分布式配置中心组件spring cloud confi ...

随机推荐

  1. PAT——1069. 微博转发抽奖

    小明PAT考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔N个人就发出一个红包.请你编写程序帮助他确定中奖名单. 输入格式: 输入第一行给出三个正整数M(<= 1000).N ...

  2. TabActivity 、fragemnt+fragment 和 Fragment+Viewpager 优缺点

    1 TabActivity : 1 过时了 . 2 activity . 是作为android的四大组件...                   重量级的家伙   ViewGroup   : 特别麻 ...

  3. Linux mysql 5.5.10 二进制安装过程记录和 修改 密码 登录

    1.useradd clouder2.解压缩mysql.tar.bz2到/home/clouder2.mv /etc/my.cnf /etc/my.cnf.bak3./home/clouder/mys ...

  4. linux内存管理---物理地址、线性地址、虚拟地址、逻辑地址之间的转换

    linux内存管理---虚拟地址.逻辑地址.线性地址.物理地址的区别(一) 这篇文章中介绍了四个名词的概念,下面针对四个地址的转换进行分析 CPU将一个虚拟内存空间中的地址转换为物理地址,需要进行两步 ...

  5. 【腾讯敏捷转型No.3】Scrum有什么好?

    在敏捷转型的过程中,除了敏捷宣言中的四个价值观和十二条原则以外,并没有太多比较权威的理论实践. 如图一,敏捷宣言中的四个价值观: (图一) 四条敏捷核心价值观指出了敏捷的核心思想,但是并没有仔细说明具 ...

  6. duplicate symbol _OBJC_IVAR

    duplicate symbol _OBJC_IVAR - Kingdev - 博客园 代码合并问题 git合并提示冲突文件为project.pbxproj,先去掉所有冲突提示<<< ...

  7. Web开发生存工具使用指南

    这里安利两款我认为开发中能够极大的提高生产力的工具,Charles 和 Postman. P.S. Charles(查尔斯)..不要再读查理斯了,金刚狼中被老铁扎心的博士就叫 CharlesP.P.S ...

  8. Sppring MVC核心应用-2

    一.Spring MVC框架中400状态码的请求错误:控制台BindException异常, 解决方法: 二.Sping 表单标签 三.数据校验 实现JSR 303验证步骤 四.REST风格 五.Sp ...

  9. web安全入门笔记

    0x01 前言 这正邪两字,原本难分. 正派弟子若是心术不正,便是邪徒. 邪派中人只要一心向善,便是正人君子. 0x01 信息安全的定义 信息安全,意为保护信息及信息系统免受未经授权的进入.使用.披露 ...

  10. 第一节 如何用Go实现单链表

    一.概念介绍 下面这副图是我们单链表运煤车队. 每节运煤车就是单链表里的元素,每节车厢里的煤炭就是元素中保存的数据.前后车通过锁链相连,作为单链表运煤车,从1号车厢开始,每节车厢都知道后面拉着哪一节车 ...