跟我学Spring Cloud(Finchley版)-19-配置中心-Spring Cloud Co

经过前文讲解,至此,微服务架构已经日趋完善——现在已经可以做一个大型的应用了!然而,随着项目的迭代,微服务数目往往与日俱增,如何高效地管理配置成为我们必须解决的问题。本节来讨论如何使用Spring Cloud Config管理配置。

为什么要使用配置中心

  • 集中管理配置。一个使用微服务架构的应用系统可能会包含成百上千个微服务,因此集中管理配置是非常有必要的;
  • 不同环境,不同配置。例如,数据源配置在不同的环境(开发、测试、预发布、生产等)中是不同的;
  • 运行期间可动态调整。例如,我们可根据各个微服务的负载情况,动态调整数据源连接池大小或熔断阈值,并且在调整配置时不停止微服务;
  • 配置修改后可自动更新。如配置内容发生变化,微服务能够自动更新配置。

Spring Cloud Config简介

Spring Cloud Config为分布式系统外部化配置提供了服务器端和客户端的支持,它包括Config Server和Config Client两部分。由于Config Server和Config Client都实现了对Spring Environment和PropertySource抽象的映射,因此,Spring Cloud Config非常适合Spring应用程序,当然也可与任何其他语言编写的应用程序配合使用。

Config Server是一个可横向扩展、集中式的配置服务器,它用于集中管理应用程序各个环境下的配置,默认使用Git存储配置内容(也可使用Subversion、MySQL、本地文件系统或Vault存储配置,本博客以Git为例进行讲解),因此可以很方便地实现对配置的版本控制与内容审计。

Config Client是Config Server的客户端,用于操作存储在Config Server中的配置属性。引入Spring Cloud Config后的架构如下:

TIPS

Spring Cloud Config的GitHub:<https://github.com/spring-cloud/spring-cloud-config&gt;

编写Config Server

示例

  • 加依赖

    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
    </dependency>
  • 加注解:@EnableConfigServer
  • 写配置:
    server:
    port: 8080
    spring:
    application:
      name: microservice-config-server
    cloud:
      config:
        server:
          git:
            # Git仓库地址
            uri: https://git.oschina.net/itmuch/spring-cloud-config-repo.git
            # Git仓库账号
            username:
            # Git仓库密码
            password:

路径规则

Spring Cloud Config Server提供了RESTful API,可用来访问存放在Git仓库中的配置文件。

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

其中的{appliation}、{profile}、{label} 都是占位符。

TIPS

事实上,可使用Spring Cloud Config实现配置的“继承”与“组合”,举个例子——

假设有一个应用:microservice-foo ,其profile是dev,那么其实Spring Cloud Config会查找如下几个文件:

  • microservice-foo-dev.yml
  • microservice-foo.yml
  • application-dev.yml
  • application.yml

对于相同属性的配置,从上至下优先级逐渐递减;最终获得的配置属性是四个文件的组合。由此,不难分析,可如下规划几个配置文件:

  • microservice-foo-dev.yml 作为指定应用在指定profile下的配置文件
  • microservice-foo.yml 作为制定应用在任何profile下都通用的配置文件
  • application-dev.yml 作为所有应用在指定profile下的配置文件
  • application.yml 作为所有应用在任何profile下都通用的配置文件

测试

  • 访问http://localhost:8080/microservice-foo-dev.yml 可访问到Git仓库的microservice-foo-dev.properties 并组合application.properties

集成Config Client

编码

  • 加依赖

    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
  • 加配置:applicaiton.yml
    server:
    port: 8081
  • 加配置:bootstrap.yml
    spring:
    application:
      name: microservice-foo    # 对应config server所获取的配置文件的{application}
    cloud:
      config:
        uri: http://localhost:8080/
        profile: dev            # profile对应config server所获取的配置文件中的{profile}
        label: master           # 指定Git仓库的分支,对应config server所获取的配置文件的{label}

    其中:

    spring.application.name:对应Config Server所获取的配置文件中的{application} ;

    spring.cloud.config.uri:指定Config Server的地址,默认是http://localhost:8888

    spring.cloud.config.profile:profile对应Config Server所获取的配置文件中的{profile} ;

    spring.cloud.config.label:指定Git仓库的分支,对应Config Server所获取配置文件的{label}。

    值得注意的是,以上属性应配置在bootstrap.yml,而不是application.yml中。如果配置在application.yml中,该部分配置就不能正常工作。例如,Config Client会连接spring.cloud.config.uri的默认值 http://localhost:8888 ,而并非我们配置的 http://localhost:8080/

    Spring Cloud有一个“引导上下文”的概念,这是主应用程序上下文(Application Context)的父上下文。引导上下文负责从配置服务器加载配置属性,以及解密外部配置文件中的属性。和主应用程序加载application.* (yml或properties)中的属性不同,引导上下文加载bootstrap.* 中的属性。配置在bootstrap.* 中的属性有更高的优先级,因此默认情况下它们不能被本地配置覆盖。

  • 写代码
    @RestController
    public class ConfigClientController {
    @Value("${profile}")
    private String profile;
    
    @GetMapping("/profile")
    public String hello() {
      return this.profile;
    }
    }

测试

访问http://localhost:8081/profile 可返回Git仓库中的配置属性。

配套代码

Config Server

Config Client

本文首发

http://www.itmuch.com/spring-cloud/finchley-19/

干货分享

原文地址:http://blog.51cto.com/10180481/2348069

时间: 2024-10-29 19:05:55

跟我学Spring Cloud(Finchley版)-19-配置中心-Spring Cloud Co的相关文章

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

上一篇文章讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当服务实例很多时,都从配置中心读取文件,这时可以考虑将配置中心做成一个微服务,将其集群化,从而达到高可用,架构图如下: 一.准备工作 继续使用上一篇文章的工程,创建一个eureka-server工程,用作服务注册中心. 在其pom.xml文件引入Eureka的起步依赖spring-cloud-starter-netflix- eureka-server,代码如下: 1 <?xml version="1.0

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

上一篇文章讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当服务实例很多时,都从配置中心读取文件,这时可以考虑将配置中心做成一个微服务,将其集群化,从而达到高可用,架构图如下: 一.准备工作 继续使用上一篇文章的工程,创建一个eureka-server工程,用作服务注册中心. 在其pom.xml文件引入Eureka的起步依赖spring-cloud-starter-netflix- eureka-server,代码如下: <?xml version="1.0&q

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

最新Finchley版本请访问:https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f7-config/或者http://blog.csdn.net/forezp/article/details/81041045 上一篇文章讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当服务实例很多时,都从配置中心读取文件,这时可以考虑将配置中心做成一个微服务,将其集群化,从而达到高可用,架构图如下: 继续使用上一篇文章的工程

【Spring Cloud】Spring Cloud Config 实现分布式配置中心

Spring Cloud Config 实现分布式配置中心 一.分布式配置中心 分布式系统中,往往拥有大量的服务应用,而每个应用程序都需要有对应的配置文件来协助完成服务环境初始化.运行.因此生产了大量的服务配置文件,Spring Cloud Config 可以实现配置文件的统一管理,它支持将配置服务放置在服务端的内存中(即服务端的本地内存),并且它也默认支持 git,所以我们也可将配置文件放置在 git 仓库,以便于我们的访问和开发. 二.Spring Cloud Config 起步 实现管理配

spring cloud深入学习(七)-----配置中心git示例

随着线上项目变的日益庞大,每个项目都散落着各种配置文件,如果采用分布式的开发模式,需要的配置文件随着服务增加而不断增多.某一个基础服务信息变更,都会引起一系列的更新和重启,运维苦不堪言也容易出错.配置中心便是解决此类问题的灵丹妙药. 市面上开源的配置中心有很多,BAT每家都出过,360的QConf.淘宝的diamond.百度的disconf都是解决这类问题.国外也有很多开源的配置中心Apache的Apache Commons Configuration.owner.cfg4j等等.这些开源的软件

springCloud学习-分布式配置中心(Spring Cloud Config)

1.简介 Spring Cloud Config :分布式配置中心,方便服务配置文件统一管理,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中.在spring cloud config 组件中,分两个角色,一是config server,二是config client. 2.config server从本地读取配置文件 2.1.在父工程的pom.xml中的 <modules>节点下 添加如下代码 <module>config-server</modul

业余草 SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)(Finchley版本)

在上一篇文章讲述zuul的时候,已经提到过,使用配置服务来保存各个服务的配置文件.它就是Spring Cloud Config. 一.简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中.在spring cloud config 组件中,分两个角色,一是config server

史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)(Finchley版本)

在上一篇文章讲述zuul的时候,已经提到过,使用配置服务来保存各个服务的配置文件.它就是Spring Cloud Config. 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中.在spring cloud config 组件中,分两个角色,一是config server,二是co

SpringCloud学习(六)分布式配置中心(Spring Cloud Config)(Finchley版本)

在上一篇文章讲述zuul的时候,已经提到过,使用配置服务来保存各个服务的配置文件.它就是Spring Cloud Config. 简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中.在spring cloud config 组件中,分两个角色,一是config server,二

Spring Cloud学习笔记 【篇一:分布式配置中心 Spring Colud Config】

一.简介 Spring Cloud Config提供了在分布式系统的外部配置的客户端支持.通过配置服务(Config Server)来为所有的环境和应用提供外部配置的集中管理.这些概念都通过Spring的Environment和PropertySource来抽象,所以它可以适用于各类Spring应用,同事支持任何语言的任何应用.它也能为你支持对应用开发环境.测试环境.生产环境的配置.切换.迁移.默认的配置实现通过git实现,同事非常容易的支持其他的扩展(比如svn等).在spring cloud