https://blog.csdn.net/z960339491/article/details/80593982
分布式配置中心
为什么要有用分布式配置中心这玩意儿?现在这微服务大军已经覆盖了各种大小型企业,每个服务的粒度相对较小,因此系统中会出现大量的服务,每个服务都要有自己都一些配置信息,或者相同的配置信息,可能不同环境每个服务也有单独的一套配置,这种情况配置文件数量比较庞大,维护起来相当费劲,举个栗子:
在开发的过程中,一般数据库是开发环境数据库,所有服务DB的IP配置为:92.168.0.1,突然老大说,开发环境换了,DB的IP要修改,这下可不好受了,所有模块挨个修改DB的配置,就问你难受不难受?
这个时候分布式配置中心就发挥了很大的优势,只需要修改配置中心配置,所有服务即可自动生效,爽不爽!

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

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

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

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

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

我们把配置文件存放到git上面
Spring Cloud Config配置中心服务连接git
客户端需要配置配置信息从配置中心服务获取
当客户端启动,会从配置中心获取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);
}

}
1
2
3
配置文件

在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: 我是配置中心配置信息
1
已经配置完成了,启动一波试试,看效果咋样,正常情况下是可以正常启动的,然后获取配置文件试试
访问地址: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里面配置的信息了,爽不!

说说中间遇到的坑
服务端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

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

客户端配置一定要配置在bootstrap.yml里面
uri默认会调用端口为8888的地址http://localhost:8888/
启动的时候,会加载label和uri,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

cloud配置中心遇到的坑的更多相关文章

  1. 记录一个 spring cloud 配置中心的坑,命令行端口参数无效,被覆盖,编码集问题无法读取文件等.

    spring cloud 配置中心 结合GIT , 可以运行时更新配置文件.发送指令让应用重新读取配置文件. 最近在测试服务器实现了一套,结果CPU 实用率暴增,使用docker compose启动 ...

  2. Spring Cloud配置中心(Config)

    Spring Cloud配置中心(Config) Spring Cloud是现在流行的分布式服务框架,它提供了很多有用的组件.比如:配置中心.Eureka服务发现. 消息总线.熔断机制等. 配置中心在 ...

  3. spring cloud 配置中心

    1. spring cloud配置中心server 1.1 创建git仓库 首先在github上搭建一个存储配置中心的仓库,需要创建两个分支,一个是master,一个是dev分支.自己学习可以用公开库 ...

  4. springcloud(五):Spring Cloud 配置中心的基本用法

    Spring Cloud 配置中心的基本用法 1. 概述 本文介绍了Spring Cloud的配置中心,介绍配置中心的如何配置服务端及配置参数,也介绍客户端如何和配置中心交互和配置参数说明. 配置中心 ...

  5. springcloud(六):Spring Cloud 配置中心采用数据库存储配置内容

    Spring Cloud 配置中心采用数据库存储配置内容 转自:Spring Cloud Config采用数据库存储配置内容[Edgware+] Spring Cloud Server配置中心采用了G ...

  6. Spring Cloud配置中心之Consul

    Consul不仅可以作为Spring Cloud中服务的注册中心,也可以作为其配置中心,这样一个系统就可以实现服务发现和统一配置,减少系统维护的麻烦,其中在使用Consul作为配置中心使用的过程中可以 ...

  7. Spring Cloud配置中心搭建(集成Git)

    1. 在Github(或其他)创建配置中心仓库bounter-config-repo,然后在仓库创建两个配置文件:simon.properties.susan.properties,链接如下: htt ...

  8. SpringCloud学习成长之路 六 cloud配置中心

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

  9. Spring Cloud配置中心内容加密

    从配置获取的配置默认是明文的,有些像数据源这样的配置需要加密的话,需要对配置中心进行加密处理. 下面使用对称性加密来加密配置,需要配置一个密钥,当然也可以使用RSA非对称性加密,但对称加密比较方便也够 ...

随机推荐

  1. leetcode解题报告 32. Longest Valid Parentheses 用stack的解法

    第一道被我AC的hard题!菜鸡难免激动一下,不要鄙视.. Given a string containing just the characters '(' and ')', find the le ...

  2. Mac 命令行,自定义命令

    例如自定义命令 gotoXFolder, 直接进入XFolder文件夹, XFolder地址为~/abc/def/Xfolder 步骤: 1. 在home文件夹下创建.profile文件 在.prof ...

  3. iOS 申请distribution证书, 公钥,私钥

    私钥只有在本机生成CSR文件的时候会产生,公钥会在CSR文件传给apple时,apple产生.

  4. jquery接触初级----jquery 对象和Dom对象

    1. DOM 对象,每一份DOm对象(Document Object model)都可以表示成一棵树,一个基本的网页如下: <!DOCTYPE html> <html lang=&q ...

  5. 使用docker-compose创建启动容器时候提示服务名已存在

    今天在测试环境启动一个已有服务时候提示服务名已存在,造成这个原因是,前些天集群的一个节点挂了,导致这个节点上的docker容器全部没了,为了当时能正常使用就使用 docker-compose -H 1 ...

  6. 删除oracle数据库用户

    手工删除ORACLE数据库用户时常会出现会话进程仍在使用导致删除失败的情况.需要查询会话并将会话删除才能成功将数据库用户删除,比较不方便. 适用场景 自动删除oracle数据库用户 基本知识 orac ...

  7. [PHP]基于角色的访问控制RBAC

    ---------------------------------------------------------------------------------------------------- ...

  8. winform下利用webBrowser执行javascript

    目前很多网站为了防止恶意提交表单信息,大多都采用了加密的方式对提交信息进行处理,加密处理后通过POST提交给服务器验证,这种操作一般都是用Javascipt进行加密,若是我们想要正确提交表单到网站,就 ...

  9. C#关键字as出现的错误

    ObjectCache cache = MemoryCache.Default; string cacheData1 = cache["key1"] as string;//得不到 ...

  10. export default 与 export

    export default 只能导出一个 可以用任意的变量来接收 export 可以暴露多个成员,需要用 import {} 接受成员 需要用名字接受 名字必须跟导出名字一致  //或者as作为别名 ...