Spring Cloud Config分布式配置中心的使用和遇到的坑

分布式配置中心

为什么要有用分布式配置中心这玩意儿?现在这微服务大军已经覆盖了各种大小型企业,每个服务的粒度相对较小,因此系统中会出现大量的服务,每个服务都要有自己都一些配置信息,或者相同的配置信息,可能不同环境每个服务也有单独的一套配置,这种情况配置文件数量比较庞大,维护起来相当费劲,举个栗子:

在开发的过程中,一般数据库是开发环境数据库,所有服务DB的IP配置为:92.168.0.1,突然老大说,开发环境换了,DB的IP要修改,这下可不好受了,所有模块挨个修改DB的配置,就问你难受不难受?

这个时候分布式配置中心就发挥了很大的优势,只需要修改配置中心配置,所有服务即可自动生效,爽不爽!

Spring Cloud Config

官网地址:http://cloud.spring.io/spring-cloud-config/

简介

Spring Cloud Config为服务端和客户端提供了分布式系统的外部化配置支持。配置服务器为各应用的所有环境提供了一个中心化的外部配置。它实现了对服务端和客户端对Spring EnvironmentPropertySource抽象的映射,所以它除了适用于Spring构建的应用程序,也可以在任何其他语言运行的应用程序中使用。作为一个应用可以通过部署管道来进行测试或者投入生产,我们可以分别为这些环境创建配置,并且在需要迁移环境的时候获取对应环境的配置来运行。

置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容。当然他也提供本地化文件系统的存储方式。

使用 spring Cloud 进行集中式配置管理,将以往的配置文件从项目中摘除后放到Git 或svn中集中管理,并在需要变更的时候,可以通知到各应用程序,应用程序刷新配置不需要重启。

实现原理

其实这个实现原理相对比较简单一些,基于git的交互操作。

  1. 我们把配置文件存放到git上面
  2. Spring Cloud Config配置中心服务连接git
  3. 客户端需要配置配置信息从配置中心服务获取
  4. 当客户端启动,会从配置中心获取git上面的配置信息

配置中心服务端

pom.xml添加依赖

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

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

Application启动类添加注解

添加@EnableConfigServer注解,启用配置中心:

package com.qianxunclub;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;

/**
* @author chihiro.zhang
*/
@SpringBootApplication
@EnableConfigServer
public class Application {

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

}

配置文件

application.yml或者application.properties添加配置信息:

spring:
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/qianxunclub/spring-boot-config-repo
          default-label: master
          search-paths: /**
          basedir: target/config
  • spring.cloud.config.server.git.uri:配置git仓库地址
  • spring.cloud.config.server.git.search-paths:仓库文件夹目录,如果是/**,就是所有目录所有文件
  • spring.cloud.config.server.git.default-label:配置仓库的分支
  • spring.cloud.config.server.git.basedir:配置文件拉去到本地的目录位置

启动测试

首先在git里面添加一个application-dev.yml配置文件,内容如此下:

test: 我是配置中心配置信息

已经配置完成了,启动一波试试,看效果咋样,正常情况下是可以正常启动的,然后获取配置文件试试

访问地址:http://localhost:8888/test/dev

如果返回如下,就是成功了:

{
    "name":"test",
    "profiles":[
        "dev"
    ],
    "label":null,
    "version":"64e7882a8f280641724e454a2db5a3da7b44d3d4",
    "state":null,
    "propertySources":[
        {
            "name":"https://gitee.com/qianxunclub/spring-boot-config-repo/application-dev.yml",
            "source":{
                "test":"配置中心的配置信息"
            }
        }
    ]
}

http请求地址和资源文件映射如下:

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

配置中心客户端使用

pom.xml添加依赖

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

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

配置文件

创建bootstrap.yml文件,切记,是bootstrap.yml文件bootstrap.yml文件,我就因为写到了application.yml这个里面,各种出现问题啊,添加如下配置:

spring:
  cloud:
    config:
      name: application
      profile: dev
      label: master
      uri: http://localhost:8888/
  • spring.cloud.config.label:指明远程仓库的分支
  • spring.cloud.config.profile:指定不同环境配置文件,和git仓库的 application-dev.yml对应
  • spring.cloud.config.name:配置名称,一般和git仓库的application-dev.yml对应
  • spring.cloud.config.uri:上面的配置中心服务地址

启动测试

先添加一个获取配置信息的类:



/**
 * @author chihiro.zhang
 */
@Configuration
@EnableAutoConfiguration
public class DemoConfiguration {

    @Value("${test}")
    private  String test;
}

找个地方随便调用一下,输出这个test,就会打印上面git里面配置的信息了,爽不!

说说中间遇到的坑

  1. 服务端git配置死活获取不了git仓库配置文件
spring:
    cloud:
        config:
        server:
            git:
                uri: https://gitee.com/qianxunclub/spring-boot-config-repo
                default-label: master
                search-paths: /**
                basedir: target/config

当时这个uri配置的是公司的git仓库,公司的git仓库访问是需要开代理才能有权限访问的,代理也开了,可是一直报错:

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Wed Jun 06 11:10:56 CST 2018
There was an unexpected error (type=Not Found, status=404).
Cannot clone or checkout repository: http://xxx.com:5080/framework/config-repo

很郁闷,不知道为啥,可是就在刚刚,就刚刚,写博客的时候,有测试了一下,通了。。。。日了狗了,不知道啥原因,等研究出来了再来补充。

  1. 客户端配置一定要配置在bootstrap.yml里面

    uri默认会调用端口为8888的地址http://localhost:8888/

    启动的时候,会加载labeluri,profile配置,profile可以在启动参数添加,profile也可以加在application.yml添加

    name也可以加在application.yml添加

demo

配置中心服务端:https://gitee.com/qianxunclub/qianxunclub-springboot-config

配置git仓库:https://gitee.com/qianxunclub/qianxunclub-springboot-config

配置客户端使用:https://gitee.com/qianxunclub/qianxunclub-starter-demo

客户端主要配置在:https://gitee.com/qianxunclub/qianxunclub-starter-parent/tree/master/qianxunclub-starter-config

原文地址:https://www.cnblogs.com/qianxunclub/p/9293773.html

时间: 2024-10-02 00:19:30

Spring Cloud Config分布式配置中心的使用和遇到的坑的相关文章

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

一.简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中.在spring cloud config 组件中,分两个角色,一是config server,二是config client. 二.构建Config Server 创建一个spring-boot项目,取名为config-s

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

SpringCloud系列教程 | 第六篇:Spring Cloud Config Github配置中心 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如无特殊说明,本系列教程全采用以上版本 随着分布式项目越来越大,勤劳的程序猿们会开始面临一个挑战,配置文件会越来越繁杂,虽然spring提供了一个鸡肋版的解决方案,spring.profiles.active,在大型的分布式项目体系中,聊胜于无吧,手动维护配置文件的痛苦,生产,UAT,测

构建微服务架构Spring Cloud:分布式配置中心

Spring Cloud Config是Spring Cloud团队创建的一个全新项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端与客户端两个部分.其中服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置仓库并为客户端提供获取配置信息.加密/解密信息等访问接口:而客户端则是微服务架构中的各个微服务应用或基础设施,它们通过指定的配置中心来管理应用资源与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息.Spring Cloud Conf

Spring Cloud Gateway 结合配置中心限流

前言 假设你领导给你安排了一个任务,具体需求如下: 针对具体的接口做限流 不同接口限流的力度可以不同 可以动态调整限流配置,实时生效 如果你接到上面的任务,你会怎么去设计+实现呢? 每个人看待问题的角度不同,自然思考出来的方案也不同,正所谓条条大路通罗马,能到达目的地的路那就是一条好路. 如何分析需求 下面我给出我的实现方式,仅供各位参考,大牛请忽略. 具体问题具体分析,针对需求点,分别去做分析. 需求一 "如何针对具体的接口做限流" 这个在上篇文章中也有讲过,只需要让KeyResol

SrpingCloud 之SrpingCloud config分布式配置中心实时刷新

默认情况下是不能及时获取变更的配置文件信息 Spring Cloud分布式配置中心可以采用手动或者自动刷新 1.手动需要人工调用接口   监控中心 2.消息总线实时通知  springbus 动态刷新数据 在SpringCloud中有手动刷新配置文件和实时刷新配置文件两种方式. 手动方式采用actuator端点刷新数据 实时刷新采用SpringCloud Bus消息总线 actuator端点刷新数据 在config clientr引入 <dependency> <groupId>o

SrpingCloud config 分布式配置中心

分布式配置中心的作用: 当一个系统中的配置文件发生改变的时候,我们需要重新启动该服务,才能使得新的配置文件生效,spring cloud config可以实现微服务中的所有系统的配置文件的统一管理,而且还可以实现当配置文件发生变化的时候,系统会自动更新获取新的配置. 原理图: 使用码云环境搭建git服务器端:https://gitee.com/ 创建一个配置仓库: config-repo 通过 文件→新建文件(如果有线程的yml配置文件则选择上传) 这里以product.yml为例创建几个不同环

springcloud-spring cloud config统一配置中心

统一配置中心 为什么需要统一配置中心? 统一配置中心顾名思义,就是将配置统一管理,配置统一管理的好处是在日后大规模集群部署服务应用时相同的服务配置一致,日后再修改配置只需要统一修改全部同步,不需要一个一个服务手动维护 统一配置中心的架构图: 服务者消费者集群,路由集群Zuul的配置文件可以全部交由config管理,Eureka Server配置是绝对不行的,因为Config配置中心也是作为一个Client服务注册到Eureka Server的,先有Server. 1.配置中心服务器的开发 1.添

spring cloud互联网分布式微服务云平台规划分析--spring cloud服务统一配置中心

1.介绍鸿鹄云架构[服务统一配置中心]为分布式系统中的外部配置提供服务器和客户端支持.使用commonservice-config,可以在所有环境中管理应用程序的外部属性.应用程序可通过从开发人员到测试和生产的部署流程,可以管理这些环境之间的配置,并确定应用程序具有迁移时需要运行的一切.服务器存储后端的默认实现使用git,因此它轻松支持标签版本的配置环境,以及可以访问用于管理内容的各种工具.很容易添加替代实现,并使用Spring Cloud Bus配置刷新方案.更多资源欢迎球911708498

spring cloud 搭建(配置中心)

创建配置中心: 选择Spring Initializr模板 选择Config Server pom文件 <?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:schema