Spring Cloud Config

  在分布式系统中,由于服务数量很多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,使用Spring Cloud Config来实现分布式配置中心,它支持配置服务放在配置服务的内存中(本地),也支持放在远程git仓库中,在spring cloud config组件中,分为两个角色,一个是config server,一个是config client。

准备配置仓库

  https://gitee.com/baidawei/SpringCloudConfig.git

构建配置中心(config server)

新建一个spring boot项目,名为com.david.configserver , pom.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<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.david</groupId>
    <artifactId>configserver</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>configserver</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

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

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Edgware.SR2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

在启动类中加上@EnableConfigServer注解开启配置服务器的功能:

@EnableConfigServer
@SpringBootApplication
public class ConfigserverApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigserverApplication.class, args);
    }
}

在application.yml中添加配置服务的基本信息以及git仓库的相关信息:

spring:
  application:
    name: david-config-server
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/baidawei/SpringCloudConfig.git      search-paths: repo
          username: #如果需要权限username
          password: #password
server:
  port: 8888

如果项目公开可以不使用账号密码,searchPaths 是文件的路径.

假设我们读取配置中心的应用名为david-config-client,那么我们可以在git仓库中创建如下两个配置文件:

david-config-client.yml

info:
  profile: default
  form: git-repo

david-config-client-dev.yml dev环境

info:
  profile: dev
  form: git-repo

到现在,使用git管理的分布式配置中心就完成了,可以通过浏览器、postman等工具来访问配置的内容了。访问配置信息的url与配置文件的映射关系如下:

  /{application}/{profile}[/{label}]

  /{application}-{profile}.yml

  /{label}/{application}-{profile}.yml

  /{application}-{profile}.properties

  /{label}/{application}-{profile}.properties

其中,{label}对应git上不同的分支,默认为master。

访问david-config-client.yml 路径为:http://localhost:8888/david-config-client/master

{"name":"david-config-client","profiles":["master"],"label":null,"version":"b5fdf45844bf09c30e403e7b069f1c243fb1d4a7","state":null,"propertySources":[{"name":"https://gitee.com/baidawei/SpringCloudConfig.git/repo/david-config-client.yml","source":{"info.profile":"default","info.form":"git-repo"}}]}

dev: http://localhost:8888/david-config-client/dev

{"name":"david-config-client","profiles":["dev"],"label":null,"version":"b5fdf45844bf09c30e403e7b069f1c243fb1d4a7","state":null,"propertySources":[{"name":"https://gitee.com/baidawei/SpringCloudConfig.git/repo/david-config-client-dev.yml","source":{"info.profile":"dev","info.from":"git-repo"}},{"name":"https://gitee.com/baidawei/SpringCloudConfig.git/repo/david-config-client.yml","source":{"info.profile":"default","info.form":"git-repo"}}]}

构建客户端

  完成了分布式配置中心后,构建一个david-config-client,获取上述配置信息,在pom.xml中添加依赖:

<?xml version="1.0" encoding="UTF-8"?>
<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.david</groupId>
    <artifactId>config-client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>config-client</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Edgware.SR2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

配置文件bootstrap.yml,来指定获取配置中心的配置文件

spring:
  application:
    name: david-config-client #对应{application}位置
  cloud:
    config:
      uri: http://localhost:8888/ #配置中心网址
      profile: default #对应{profile}位置 dev等
      label: master #对应{label}位置 分支
server:
  port: 8881

名字必须是bootstrap.yml或properties才能被正确加载,

新建TestController

@RestController
public class TestController {
    @Value("${info.profile}")
    String info;
    @GetMapping("/test")
    public String test(){
        return info;
    }
}

把server和client都启动起来

http://localhost:8881/test 输出default 切换配置文件中的profile为dev  输出为dev

这说明,config-client是从config-server中获取了info.profile属性,而config-server是从git仓库读取的

Spring Cloud (5) 分布式配置中心的更多相关文章

  1. Spring Cloud Config 分布式配置中心使用教程

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

  2. Spring Cloud 2-Config 分布式配置中心(七)

    Spring Cloud  Config  1.github配置 2.服务端配置 pom.xml application.xml Application.java 3.配置和命名 1. 配置加载顺序 ...

  3. Spring Cloud Config 分布式配置中心【Finchley 版】

    一. 介绍 1,为什么需要配置中心? 当服务部署的越来越多,规模越来越大,对应的机器数量也越来越庞大,靠人工来管理和维护服务的配置信息,变得困难,容易出错. 因此,需要一个能够动态注册和获取服务信息的 ...

  4. Spring Cloud (6) 分布式配置中心-高可用

    高可用 现在已经可以从配置中心读取配置文件了,当微服务很多时都从配置中心读取配置文件,这时可以将配置中心做成一个微服务,将其集群化,从而达到高可用. 改造config-server 加入eureka ...

  5. Spring Cloud之分布式配置中心

    用服务的方式来实现 ConfigAppApplication.java package com.packtpub.ConfigApp; import org.springframework.boot. ...

  6. 跟我学SpringCloud | 第六篇:Spring Cloud Config Github配置中心

    SpringCloud系列教程 | 第六篇:Spring Cloud Config Github配置中心 Springboot: 2.1.6.RELEASE SpringCloud: Greenwic ...

  7. Spring Cloud Config 实现配置中心,看这一篇就够了

    Spring Cloud Config 是 Spring Cloud 家族中最早的配置中心,虽然后来又发布了 Consul 可以代替配置中心功能,但是 Config 依然适用于 Spring Clou ...

  8. Spring Cloud Config的配置中心获取不到最新配置信息的问题

    Spring Cloud Config的配置中心获取不到最新配置信息的问题 http://blog.didispace.com/spring-cloud-tips-config-tmp-clear/

  9. 从0开始用spring boot编写分布式配置中心-peppa

    欢迎大家一起来编写peppa github地址: github 交流群: 目前市面上比较流行的分布式配置中心有disconf.apollo,用起来还是比较方便的,然而由于在权限管理这块做得不够好,导致 ...

随机推荐

  1. JSBinding / Plugins &amp; Build Mozjswrap Library

    There are 2 libraries in Plugins: mozjs-31. This is SpiderMonkey library, built from https://github. ...

  2. Android开发者资源大汇总

    本文总结了最新的Android开发资源.下面列出的资源都是常用的,每个Android程序员都应该知道,能大大方便App开发.Enjoy~ 来源:Android开发周刊 中文的Android开发信息,资 ...

  3. 怎样将某一类型标识为适合绑定到 System.Web.UI.WebControls.ObjectDataSource 对象的对象

    1.页面的代码如下: body> <form id="form1" runat="server"> <div> </div& ...

  4. ndk的一些概念

    什么场景应用ndk 1.代码的包含,apk的java层代码容易被反编译,c/c++被反编译难度非常大 2.NDK中调用 第三方C/C++库,因为大部分的开源库都是c/c++编写,比如opencv,op ...

  5. jQuery慢慢啃之事件对象(十一)

    1.event.currentTarget//在事件冒泡阶段中的当前DOM元素 $("p").click(function(event) { alert( event.curren ...

  6. vc中Error spawning cl.exe错误的解决方法.

    可能很多人在安装VC 6.0后有过点击“Compile”或者“Build”后被出现的 “Compiling... ,Error spawning cl.exe”错误提示给郁闷过.很多人的 选择是重装, ...

  7. html5 01 随记

    一  HTML 是一种制作网站的标记语言 二.HTML基本语法 HTML 标签 html标签是html中的最基本单位 也是最重要的部分 通常使用尖角号 开始"<"和结束&qu ...

  8. CF1082

    D 乱搞题..发现只有a[i]=1是特殊的 瞎搞一下 E 发现一段的贡献是出现次数最多的-为c个数 然后考虑分别对每种颜色做一下 然后每次只有这种颜色和他们之间是有用的 然后做个最大区间和就好了 F ...

  9. DoTween的用法

    using UnityEngine;using System.Collections;using DG.Tweening;using UnityEngine.UI; public class Test ...

  10. 【Ansible 文档】【译文】Ad-Hoc 命令介绍

    Introduction To Ad-Hoc Commands Ad-Hoc命令介绍 下面的例子展示了如何使用 /usr/bin/ansible 来运行ad hoc任务. 什么是ad hoc命令? 一 ...