spring-cloud-config-server——Environment Repository(Git Backend)
参考资料:
http://cloud.spring.io/spring-cloud-static/Camden.SR7/#_environment_repository
Git Backend——Git后端
EnvironmentRespository的默认实现使用Git后端,这对于管理升级和环境检查以及审核更改非常方便。
要更改存储库的位置,可以在配置服务器中设置"spring.cloud.config.server.git.uri"配置属性(例如,在applicaton.yml中)
如果使用 file: 前缀进行设置,则应该从本地存储运行,这样就可以在没有服务器的情况下快速轻松的工作,但是这种情况下,服务器会直接在本地存储库上运行而不克隆它(不要紧,因为配置服务器永远不会更改"remote"存储库)。
要扩展配置服务器并使其高度可用,需要将服务的所有实例指向同一个存储库,因此只有共享文件系统才能工作。即使在这种情况下,对共享文件系统存储库使用ssh: 协议更好,以便服务器可以克隆它并且使用本地工作服务作为缓存。
该存储库实现将HTTP资源的{label}参数隐射到git标签(commit id,分支名称或标签)。
如果git分支或标签名称包含斜线("/"),则应该使用特殊字符串 "(_)"来指定HTTP URL中标签(以避免与其他URL路径混淆)。例如,如果标签为 foo/bar ,则提换斜杠将导致标签看起来像 foo(_)bar。
包含特殊字符串"(\_)"也可以应用于{application}参数。
如果使用像curl这样的命令行客户端(例如使用引号将其从shell中转出来),请小心URL中的方括号。
Placeholders in Git URI——Git URI中的占位符
Spring Cloud Config Server支持一个带有 {application} 和 {profile} (以及{label},如果需要的话。但是请记住,标签无论如何是作为一个git标签来应用的)的占位符的git仓库URL。
因此,你可以轻松支持使用"一个应用程序一个repo"策略,例如:
spring:
cloud:
config:
server:
git:
uri: https://github.com/myorg/{application}
或者使用类型模式但是使用{profile}的"每一个profile一个repo"策略。
另外,在{application}参数中使用特殊字符串“(\_)”可以启用对多个组织的支持,例如:
spring:
cloud:
config:
server:
git:
uri: https://github.com/{application}
其中,{application}在请求时以"organization(\_)application"格式提供。
Pattern Matching and Multiple Repositories——模式匹配和多个存储库
模式格式是带有通配符的{application} 和{profile}名称的逗号分割列表(可能需要引用以通配符开始的模式)。例如:
spring:
cloud:
config:
server:
git:
uri: https://github.com/spring-cloud-samples/config-repo
repos:
simple: https://github.com/simple/config-repo
special:
pattern: special*/dev*,*special*/dev*
uri: https://github.com/special/config-repo
local:
pattern: local*
uri: file:/home/configsvc/config-repo
如果{application}/{profile}与任何模式都不匹配,它将使用在"spring.cloud.config.server.git.uri"下定义的默认值。
在上面的例子中,对于"simple"存储库,匹配模式是"simple/*"(即,所有的配置文件中只匹配一个名为"simple"的应用程序)。"local"存储库与所有配置文件中以"local"开头的所有应用程序名称匹配("/*"后缀自动添加到没有配置文件匹配器的任何模式中)。
note:在上述“simple”示例中使用的“one-liner”快捷方式只能在唯一要设置的属性为URI的情况下使用。如果您需要设置其他任何内容(凭据,模式等),则需要使用完整的表单.
repo中pattern属性实际上是一个数组,因此你可以使用YAML数组(或属性文件中的[0],[1]等后缀)绑定到多个模式。如果要运行具有多个配置文件的应用程序,则可能需要执行此操作。例如:
spring:
cloud:
config:
server:
git:
uri: https://github.com/spring-cloud-samples/config-repo
repos:
development:
pattern:
- '*/development'
- '*/staging'
uri: https://github.com/development/config-repo
staging:
pattern:
- '*/qa'
- '*/production'
uri: https://github.com/staging/config-repo
note:Spring Cloud将会猜测,包含不以"*"结尾的配置文件的模式意味着你实际上想要匹配以此模式开始的配置文件列表(所以*/staging
是["*/staging","*/staging,*"]
的快捷方式).
每个存储库还可以将配置文件存储在子目录中,并且可以将搜索这些目录的模式指定为 searchPaths。例如在顶层:
spring:
cloud:
config:
server:
git:
uri: https://github.com/spring-cloud-samples/config-repo
searchPaths: foo,bar*
在此例中,服务在顶层和"foo/"子目录以及名称以"bar"开头的任何子目录中搜索配置文件。
默认情况下,服务器首次请求配置时克隆远程存储库。可以将服务器配置为在启动时克隆存储库。例如在顶层:
spring:
cloud:
config:
server:
git:
uri: https://git/common/config-repo.git
repos:
team-a:
pattern: team-a-*
cloneOnStart: true
uri: http://git/team-a/config-repo.git
team-b:
pattern: team-b-*
cloneOnStart: false
uri: http://git/team-b/config-repo.git
team-c:
pattern: team-c-*
uri: http://git/team-a/config-repo.git
在这个例子中,服务其在接受任何请求之前,在启动时克隆 team-a的config-repo。所有其他存储库将不会被克隆,知道从存储库请求配置时。
note:设置当配置服务器在启动时克隆存储库可以帮助在配置服务器启动时快速识别出错误的配置源(例如,无效的存储库URI)。配置源未启用cloneOnStart时,配置服务器可能会启动成功 配置错误或无效的 配置源,并没有检测到错误,直到应用程序从该配置源请求配置为止。
Authentication——认证
要在远程存储库上使用HTTP基本认证,请单独添加"username"和"password"属性(不在URL中)。例如:
spring:
cloud:
config:
server:
git:
uri: https://github.com/spring-cloud-samples/config-repo
username: trolley
password: strongpassword
如果不使用HTTPS和用户凭证,那么当你将密钥存储在默认目录(~/.ssh)并且uri指向SSH位置时,SSH也应该开箱即用。例如:"git@github.com:configuration/cloud-configuration"
在 ~/.ssh/know_hosts文件中存在Git服务器条目,并且是 ssh-rsa格式,这一点很重要。其他格式(例如: ecdsa-sha2-nistp256
)不支持。
为了避免意外,你应该确保在Git服务器的know_hosts
文件中只有一个条目,并且与你提供给配置服务器的URL匹配。
如果你在URL中使用了一个主机名,那么在know_hosts
文件中使用主机名,而不是IP。
使用jGit可以访问存储库,因此你找到的任何文档都应该适用。
HTTPS代理设置可以在~/.git/config中设置,也可以通过系统属性(-Dhttps.proxyHost
和-Dhttps.proxyPort
)以与其他任何JVM进程相同的方式设置HTTPS代理设置。
note:如果你不知道你的~/.git目录在哪,使用git config --global
来操作设置 (例如:git config --global http.sslVerify false
)
Git SSH configuration using properties——使用属性Git SSH配置
默认情况下,当使用SSH URI连接到Git存储库时,Spring Cloud Config使用的JGit库使用SSH配置文件,例如:~/.ssh/known_hosts and /etc/ssh/ssh_config.
在Cloud Foundry等云环境中,本地文件系统可能是短暂的或不可访问的。对于这种情况,可以使用Java属性来设置SSH配置。为了激活基于属性的SSH配置,必须将spring.cloud.config.server.git.ignoreLocalSshSettings
属性设置为True。例如:
spring:
cloud:
config:
server:
git:
uri: git@gitserver.com:team/repo1.git
ignoreLocalSshSettings: true
hostKey: someHostKey
hostKeyAlgorithm: ssh-rsa
privateKey: |
-----BEGIN RSA PRIVATE KEY-----
MIIEpgIBAAKCAQEAx4UbaDzY5xjW6hc9jwN0mX33XpTDVW9WqHp5AKaRbtAC3DqX
IXFMPgw3K45jxRb93f8tv9vL3rD9CUG1Gv4FM+o7ds7FRES5RTjv2RT/JVNJCoqF
ol8+ngLqRZCyBtQN7zYByWMRirPGoDUqdPYrj2yq+ObBBNhg5N+hOwKjjpzdj2Ud
1l7R+wxIqmJo1IYyy16xS8WsjyQuyC0lL456qkd5BDZ0Ag8j2X9H9D5220Ln7s9i
oezTipXipS7p7Jekf3Ywx6abJwOmB0rX79dV4qiNcGgzATnG1PkXxqt76VhcGa0W
DDVHEEYGbSQ6hIGSh0I7BQun0aLRZojfE3gqHQIDAQABAoIBAQCZmGrk8BK6tXCd
fY6yTiKxFzwb38IQP0ojIUWNrq0+9Xt+NsypviLHkXfXXCKKU4zUHeIGVRq5MN9b
BO56/RrcQHHOoJdUWuOV2qMqJvPUtC0CpGkD+valhfD75MxoXU7s3FK7yjxy3rsG
EmfA6tHV8/4a5umo5TqSd2YTm5B19AhRqiuUVI1wTB41DjULUGiMYrnYrhzQlVvj
5MjnKTlYu3V8PoYDfv1GmxPPh6vlpafXEeEYN8VB97e5x3DGHjZ5UrurAmTLTdO8
+AahyoKsIY612TkkQthJlt7FJAwnCGMgY6podzzvzICLFmmTXYiZ/28I4BX/mOSe
pZVnfRixAoGBAO6Uiwt40/PKs53mCEWngslSCsh9oGAaLTf/XdvMns5VmuyyAyKG
ti8Ol5wqBMi4GIUzjbgUvSUt+IowIrG3f5tN85wpjQ1UGVcpTnl5Qo9xaS1PFScQ
xrtWZ9eNj2TsIAMp/svJsyGG3OibxfnuAIpSXNQiJPwRlW3irzpGgVx/AoGBANYW
dnhshUcEHMJi3aXwR12OTDnaLoanVGLwLnkqLSYUZA7ZegpKq90UAuBdcEfgdpyi
PhKpeaeIiAaNnFo8m9aoTKr+7I6/uMTlwrVnfrsVTZv3orxjwQV20YIBCVRKD1uX
VhE0ozPZxwwKSPAFocpyWpGHGreGF1AIYBE9UBtjAoGBAI8bfPgJpyFyMiGBjO6z
FwlJc/xlFqDusrcHL7abW5qq0L4v3R+FrJw3ZYufzLTVcKfdj6GelwJJO+8wBm+R
gTKYJItEhT48duLIfTDyIpHGVm9+I1MGhh5zKuCqIhxIYr9jHloBB7kRm0rPvYY4
VAykcNgyDvtAVODP+4m6JvhjAoGBALbtTqErKN47V0+JJpapLnF0KxGrqeGIjIRV
cYA6V4WYGr7NeIfesecfOC356PyhgPfpcVyEztwlvwTKb3RzIT1TZN8fH4YBr6Ee
KTbTjefRFhVUjQqnucAvfGi29f+9oE3Ei9f7wA+H35ocF6JvTYUsHNMIO/3gZ38N
CPjyCMa9AoGBAMhsITNe3QcbsXAbdUR00dDsIFVROzyFJ2m40i4KCRM35bC/BIBs
q0TY3we+ERB40U8Z2BvU61QuwaunJ2+uGadHo58VSVdggqAo0BSkH58innKKt96J
69pcVH/4rmLbXdcmNYGm6iu+MlPQk4BUZknHSmVHIFdJ0EPupVaQ8RHT
-----END RSA PRIVATE KEY-----
SSH配置属性:
Property Name | Remarks |
---|---|
ignoreLocalSshSettings |
If true, use property based SSH config instead of file based. Must be set at as |
privateKey |
Valid SSH private key. Must be set if |
hostKey |
Valid SSH host key. Must be set if |
hostKeyAlgorithm |
One of |
strictHostKeyChecking |
|
knownHostsFile |
Location of custom .known_hosts file |
preferredAuthentications |
Override server authentication method order. This should allow evade login prompts if server has keyboard-interactive authentication before |
Placeholders in Git Search Paths——Git搜索路径中的占位符
Spring Cloud Config Server还支持使用{application}和{profile}(以及{label},如果需要)占位符的搜索路径。例如:
spring:
cloud:
config:
server:
git:
uri: https://github.com/spring-cloud-samples/config-repo
searchPaths: '{application}'
在存储库中搜索与目录同名的文件(以及顶层).通配符在带占位符的搜索路径中也是有效的(搜索中包含任何匹配的目录)
Force pull int Git Repositories——强制拉入Git仓库
如前所述,Spring Cloud Config Server对远程git存储库进行了克隆,如果本地副本不知怎么变脏(例如,文件夹内容由操作系统进程更改),则Spring Cloud Config Server无法从远程存储库更新本地副本。
为了解决这个问题,如果本地副本是脏的,就会有一个强制拉取属性force-pull,使Spring Cloud Config Server从远程存储库强制拉取。例如:
spring:
cloud:
config:
server:
git:
uri: https://github.com/spring-cloud-samples/config-repo
force-pull: true
如果您有多个存储库配置,则可以配置每个存储库的强制拉取属性force-pull。例如:
spring:
cloud:
config:
server:
git:
uri: https://git/common/config-repo.git
force-pull: true
repos:
team-a:
pattern: team-a-*
uri: http://git/team-a/config-repo.git
force-pull: true
team-b:
pattern: team-b-*
uri: http://git/team-b/config-repo.git
force-pull: true
team-c:
pattern: team-c-*
uri: http://git/team-a/config-repo.git
note:强制拉取属性force-pull的默认值为false
spring-cloud-config-server——Environment Repository(Git Backend)的更多相关文章
- 为Spring Cloud Config Server配置远程git仓库
简介 虽然在开发过程,在本地创建git仓库操作起来非常方便,但是在实际项目应用中,多个项目组需要通过一个中心服务器来共享配置,所以Spring Cloud配置中心支持远程git仓库,以使分散的项目组更 ...
- Spring Cloud Config Server 节点迁移引起的问题,请格外注意这一点!
前言: 虽然强烈推荐选择使用国内开源的配置中心,如携程开源的 Apollo 配置中心.阿里开源的 Nacos 注册&配置中心. 但实际架构选型时,根据实际项目规模.业务复杂性等因素,有的项目还 ...
- ubuntu14.04 spring cloud config server + gradle搭建
Server端:在eclipse上,创建Java Project项目.自带的src包删掉手动建文件夹.基础的目录文件都创建上 |--ZSpringCloud|--build.gradle|----sr ...
- Spring Cloud Config 使用SVN 和 git方式的相关配置
文件的存储方式: 1.使用svn 当做配置中心 config server的配置方式: 引入svn的包 <dependency> <groupId>org.tmatesoft. ...
- Spring Cloud Config(配置中心)
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 一.简介 Spring Cloud Config为分布式系统中的外部配置提供服务器和客 ...
- 网络原因导致的 spring cloud config 读取git上的配置文件时报错:Cannot clone or checkout repository
今天在公司使用spring cloud config搭建配置中心的时候,出现了读取不到git库的问题:Cannot clone or checkout repository.在网上百度,前面几个答案都 ...
- Spring Cloud config之三:config-server因为server端和client端的健康检查导致服务超时阻塞问题
springcloud线上一个问题,当config-server连不上git时,微服务集群慢慢的都挂掉. 在入口层增加了日志跟踪问题: org.springframework.cloud.config ...
- 微服务SpringCloud之Spring Cloud Config配置中心Git
微服务以单个接口为颗粒度,一个接口可能就是一个项目,如果每个项目都包含一个配置文件,一个系统可能有几十或上百个小项目组成,那配置文件也会有好多,对后续修改维护也是比较麻烦,就和前面的服务注册一样,服务 ...
- Spring Cloud Config(二):基于Git搭建配置中心
1.简述 本文选用Git作为配置仓库,新建两个环境的配置文件夹,dev 和 test,文件夹中分别存放 Config Client 端的配置文件,目录结构如下: ├ ─ ─ dev └ ─ ─ con ...
随机推荐
- Alpine Linux常用命令
一:Alpine Linux开启SSH远程登陆 1.简介: 最重要的一个服务了,远程登陆需要用它,文件传输需要用它,必备功能.不管你是在实体机上跑,虚拟机上跑,docker里面跑,这个都是必须的. 2 ...
- mysql小细节随笔
1, MySQL decimal(x,y) 存入根据y的下一位四舍五入,查了半天以为是laravel模型做了预处理,结果发现不是,是mysql decimal类型数据自动处理的,有好,也不好,合并订 ...
- 新版Ubuntu安装日文输入法
在Ubuntu的设置中安装日文输入法 本周在调试书上代码时需要安装日文输入法,我发现在百度上并没有在最新版Ubuntu下安装日文输入法的教程,于是我写了这篇博客来与大家分享一下我的安装过程. a.如图 ...
- 算法基础_递归_给定m个A,n个B,一共有多少种排列
问题描述: 给定m个A,n个B,一共有多少种排列 解题源代码: /** * 给定m个A,n个B,问一共有多少种排列 * @author Administrator * */ public class ...
- c 语言 随机数选取6个数 一定范围内
种子来源 定时器/****************** 自动筛选种子 dat 目标种子 ************/ #define max 7 //随机生成最大的数为7 #define min 1 / ...
- 解决秒杀活动高并发出现负库存(Redis)
商城在秒杀活动开始时,同时有好多人来请求这个接口,即便做了判断库存逻辑,也难免防止库存出现超卖,造成损失 Django中的ORM本身就对数据库做了防范,但再过亿级访问也扛不住 下面利用Redis的过载 ...
- ES6 模块
概述 在 ES6 前, 实现模块化使用的是 RequireJS 或者 seaJS(分别是基于 AMD 规范的模块化库, 和基于 CMD 规范的模块化库). ES6 引入了模块化,其设计思想是在编译时 ...
- GitHub的操作
一.查看自己的信息:git config --list 修改config文件:01.输入vim ~/.gitconfig(回车) 02.点击 i.o或a 进入编辑模式 03.修改所要修改的信息 04. ...
- (转载)Java Map中的Value值如何做到可以为任意类型的值
转载地址:http://www.importnew.com/15556.html 如有侵权,请联系作者及时删除. 搬到我的博客来,有空细细品味,把玩. 本文由 ImportNew - shut ...
- Kafka实践1--Producer
一.Kafka设计原理参考: http://blog.csdn.net/suifeng3051/article/details/48053965?locationNum=2 http://www.cn ...