cloud配置中心遇到的坑
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配置中心遇到的坑的更多相关文章
- 记录一个 spring cloud 配置中心的坑,命令行端口参数无效,被覆盖,编码集问题无法读取文件等.
spring cloud 配置中心 结合GIT , 可以运行时更新配置文件.发送指令让应用重新读取配置文件. 最近在测试服务器实现了一套,结果CPU 实用率暴增,使用docker compose启动 ...
- Spring Cloud配置中心(Config)
Spring Cloud配置中心(Config) Spring Cloud是现在流行的分布式服务框架,它提供了很多有用的组件.比如:配置中心.Eureka服务发现. 消息总线.熔断机制等. 配置中心在 ...
- spring cloud 配置中心
1. spring cloud配置中心server 1.1 创建git仓库 首先在github上搭建一个存储配置中心的仓库,需要创建两个分支,一个是master,一个是dev分支.自己学习可以用公开库 ...
- springcloud(五):Spring Cloud 配置中心的基本用法
Spring Cloud 配置中心的基本用法 1. 概述 本文介绍了Spring Cloud的配置中心,介绍配置中心的如何配置服务端及配置参数,也介绍客户端如何和配置中心交互和配置参数说明. 配置中心 ...
- springcloud(六):Spring Cloud 配置中心采用数据库存储配置内容
Spring Cloud 配置中心采用数据库存储配置内容 转自:Spring Cloud Config采用数据库存储配置内容[Edgware+] Spring Cloud Server配置中心采用了G ...
- Spring Cloud配置中心之Consul
Consul不仅可以作为Spring Cloud中服务的注册中心,也可以作为其配置中心,这样一个系统就可以实现服务发现和统一配置,减少系统维护的麻烦,其中在使用Consul作为配置中心使用的过程中可以 ...
- Spring Cloud配置中心搭建(集成Git)
1. 在Github(或其他)创建配置中心仓库bounter-config-repo,然后在仓库创建两个配置文件:simon.properties.susan.properties,链接如下: htt ...
- SpringCloud学习成长之路 六 cloud配置中心
一.简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config ...
- Spring Cloud配置中心内容加密
从配置获取的配置默认是明文的,有些像数据源这样的配置需要加密的话,需要对配置中心进行加密处理. 下面使用对称性加密来加密配置,需要配置一个密钥,当然也可以使用RSA非对称性加密,但对称加密比较方便也够 ...
随机推荐
- leetcode解题报告 32. Longest Valid Parentheses 用stack的解法
第一道被我AC的hard题!菜鸡难免激动一下,不要鄙视.. Given a string containing just the characters '(' and ')', find the le ...
- Mac 命令行,自定义命令
例如自定义命令 gotoXFolder, 直接进入XFolder文件夹, XFolder地址为~/abc/def/Xfolder 步骤: 1. 在home文件夹下创建.profile文件 在.prof ...
- iOS 申请distribution证书, 公钥,私钥
私钥只有在本机生成CSR文件的时候会产生,公钥会在CSR文件传给apple时,apple产生.
- jquery接触初级----jquery 对象和Dom对象
1. DOM 对象,每一份DOm对象(Document Object model)都可以表示成一棵树,一个基本的网页如下: <!DOCTYPE html> <html lang=&q ...
- 使用docker-compose创建启动容器时候提示服务名已存在
今天在测试环境启动一个已有服务时候提示服务名已存在,造成这个原因是,前些天集群的一个节点挂了,导致这个节点上的docker容器全部没了,为了当时能正常使用就使用 docker-compose -H 1 ...
- 删除oracle数据库用户
手工删除ORACLE数据库用户时常会出现会话进程仍在使用导致删除失败的情况.需要查询会话并将会话删除才能成功将数据库用户删除,比较不方便. 适用场景 自动删除oracle数据库用户 基本知识 orac ...
- [PHP]基于角色的访问控制RBAC
---------------------------------------------------------------------------------------------------- ...
- winform下利用webBrowser执行javascript
目前很多网站为了防止恶意提交表单信息,大多都采用了加密的方式对提交信息进行处理,加密处理后通过POST提交给服务器验证,这种操作一般都是用Javascipt进行加密,若是我们想要正确提交表单到网站,就 ...
- C#关键字as出现的错误
ObjectCache cache = MemoryCache.Default; string cacheData1 = cache["key1"] as string;//得不到 ...
- export default 与 export
export default 只能导出一个 可以用任意的变量来接收 export 可以暴露多个成员,需要用 import {} 接受成员 需要用名字接受 名字必须跟导出名字一致 //或者as作为别名 ...