文档章节

SPC-Config 笔记

D
 DoIt
发布于 2017/05/15 14:33
字数 1729
阅读 8
收藏 0

Spring Cloud Config
在分布式系统中为服务端和客户端提供扩展配置信息。
我们有一个集中的位置来跨所有环境管理应用程序的外部属性。
客户端和服务器映射到Spring的Environment和PropertySource抽象,所以对Spring应用程序来说非常契合。
在我们从开发到测试再到生产部署整个应用程序开发管道中,我们可以利用它来管理各个阶段的环境配置。
默认的服务后端存储是使用的git,所以能很容易的标签化配置版本管理。被大范围的工具访问。
还可以很容易的通过Spring的配置来实现添加替换实现和插件。

$ cd spring-cloud-config-server
$ ../mvnw spring-boot:run

$ curl localhost:8888/foo/development
{"name":"development","label":"master","propertySources":[
  {"name":"https://github.com/scratches/config-repo/foo-development.properties","source":{"bar":"spam"}},
  {"name":"https://github.com/scratches/config-repo/foo.properties","source":{"foo":"bar"}}
]}

默认的定位属性源策略是复制一个git仓库(spring.cloud.config.server.git.uri) 用它来初始化一个最小配置的SpringApplication。
这个最小配置的应用程序的Environment 可以如下形式访问
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties

这里的application 会注入spring.config.name的值, profile是活动目录,label是可选的git标签(默认为master)

Spring Cloud Config Server从一个git仓库为一个远程客户端拉配置信息。
spring:
 cloud:
  config:
   server:
    git:
     uri:https://github.com/spring-cloud-samples/config-repo
     
     
     
客户端如何使用:
要在一个应用程序中使用这些,只需要创建一个Spring Boot应用程序然后添加spring-cloud-config-client依赖:
org.springframework.cloud:spring-cloud-starter-config

spring-cloud-starter-parent

pom.xml

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

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

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

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
<!-- repositories also needed for snapshots and milestones -->


Application.java

@SpringBootApplication
@RestController
public class Application {

    @RequestMapping("/")
    public String home() {
        return "Hello World!";
    }

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

Spring Cloud Config Server
为外部配置(名值对)提供基于资源的HTTP API,该服务可以使用@EnableConfigServer声明很容易的被嵌入到一个Spring Boot 应用程序中。
ConfigServer.java

@SpringBootApplication
@EnableConfigServer
public class ConfigServer{
    public static void main(String[] args){
        SpringApplication.run(Configuration.class,args);
    }
}
该服务通过ConfigServer Jar包里的configserver.yml文件的spring.config.name=configserver设置了默认的配置仓库。
另外我们可以应用自己的application.properties文件设置
因为所有的Spring Boot Application默认运行在8080 端口,我们可以通过application.properties文件中设置修改它。
server.port:8888
spring.cloud.config.server.git.uri: file://${user.home}/config-repo

这里的${user.home}/config-repo 是一个包含YAML和Properties文件的git仓库
如果是Windows系统下,需要写成:  file:///${user.home}/config-repo

Git库创建:

$ cd $HOME
$ mkdir config-repo
$ cd config-repo
$ git init .
$ echo info.foo: bar > application.properties
$ git add -A .
$ git commit -m "Add application.properties"

Environment Repository环境仓库
我们需要将配置服务器的配置数据放到哪里呢?
处理这个问题的是EnvionmentRepository,围绕着Environment对象操作。
Environment对象是对Spring Environment(包括propertySource作为主要内容)的浅拷贝。
Environment资源被参数化为三个变量:
{application} 映射到客户端的 spring.application.name
{profile} 映射到客户端的spring.profile.active 通常是以逗号分开的列表
{label}这是服务端的内容标签一个版本化的配置文件设置。

Repository实现的通用功能跟一个Spring Boot 应用程序一样,从spring.config.name({application}参数),spring.profile.active({profiles}参数)加载配置文件.
优先级规则跟标准的Spring Boot 应用程序一样,活动Profile比默认的优先级更高,如果有多个profiles,则最后一个被使用。

bootstrap.yml

spring:
 application:
  name: foo
 profiles:
  active:dev,mysql
  

如果仓库是基于文件的,服务会从application.yml和foo.yml来创建Environment。
如果YAML文件有文档在里面指向Spring Profiles,那么它们有更高的优先级。(依照profiles的排列顺序递增)

Git 后端:
EnvironmentRepository 默认是使用Git后端实现的。非常方便的管理升级和物理环境,以及审计变化。
我们可以通过Config Server的application.yml文件里 用spring.cloud.config.server.git.uri 配置属性来修改仓库位置。
如果我们使用file:前缀,将会从本地仓库获取。
最好使用ssh协议来共享文件仓库,这样服务可以克隆它使用本地网络来拷贝一个缓存。

Repository实现了映射HTTP资源的{label}参数到一个git label(提交id,branch名,或者标签)
如果git branch或者标签名含有斜杠(“/”),则HTTP URL中应该使用下划线替代。
比如 foo/bar , foo_bar

Git URI中的占位符:
支持git仓库URL使用占位符,比如{application},{profile},{label}等。
所以很容易实现一个应用程序对应一个仓库。或者使用{profile}实现一个目录对应一个仓库。
spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/myorg/{application}


模式匹配和多仓库:
支持模式匹配application和profile名,格式是{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值。
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
              
              
每个仓库还可以可选的保存配置文件到一个子目录,用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

身份验证:
使用HTTP基础身份验证,需要设置username和password
spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/spring-cloud-samples/config-repo
          username: trolley
          password: strongpassword

如果我们不适用HTTPS和用户信用凭证,我们需要将uri执行一个SSH位置("git@github.com:configuration/cloud-configuration")
对于Git Server来说在~/.ssh/known_hosts文件中入口,是ssh-rsa格式。


文件系统后端:
从本地classpath或者文件系统中(spring.cloud.server.native.searchLocations 静态URL)
要是用native profile只需要设置Config Server的 spring.profiles.active=native

file:///${user.home}/config-repo

默认的搜寻目录:
[classpath:/, classpath:/config, file:./, file:./config]


组合多个Environment仓库
有时候我们需要从多个环境仓库中获取配置数据,只需要在Config Server的 application.properties  或者 YAML文件中,启用多profiles即可。
spring:
  profiles:
    active: git, svn
  cloud:
    config:
      server:
        svn:
          uri: file:///path/to/svn/repo
          order: 2
        git:
          uri: file:///path/to/git/repo
          order: 1        

© 著作权归作者所有

上一篇: SPC-Dalston笔记
下一篇: AI 小记
D
粉丝 3
博文 105
码字总数 248750
作品 0
海淀
高级程序员
私信 提问
从 Vim 迁移到 spacemacs

从 vim 迁移到 spacemacs 本文档的目的 哲学 基本使用 缓冲区 窗户 模式和状态 层 微观状态 条款 方便快捷的按键绑定 执行命令 缓冲区和窗口管理 文件 帮助系统 探索 定制 改变 escape 键 改...

1m80
2015/11/09
10.7K
22
ffmpeg获取源的pix-fmt

深入代码后,发现是从PPS中得到,最外层的是avformatfindstream_info,如下: 主要介绍decodenalunits,getpixelformat,ffh264decodesliceheader。 static int decodenalunits(H264Context ...

evsqiezi
2018/04/13
0
0
宏杉MacroSAN MS3000G2 SPC-1测试性价比第一

基于SPC-1 V3.4.0新版测试标准的一批产品评测结果最新出炉。43万IOPS、0.33美元/SPC-1 IOPS,宏杉MacroSAN MS3000G2“要颜值有颜值,要肌肉有肌肉”,哎哟,不错哟! 企业级存储是一个技术门...

玄学酱
2018/03/29
0
0
SPC-1测试成绩单之外,宏杉科技还传递了哪些信息?

最近和宏杉科技的交流中获悉,他们花了几个月时间搞的SPC-1测试终于了有了结果,表现还不错。对于SPC-1测试,它反映了存储系统在执行关键业务应用时的性能表现,以随机I / O操作为主,可以为...

玄学酱
2018/03/29
0
0
SPC-1成绩单外 宏杉科技想传递什么信息

  【IT168 评论】最近和宏杉科技的交流中获悉,他们花了几个月时间搞的SPC-1测试终于了有了结果,表现还不错。对于SPC-1测试,它反映了存储系统在执行关键业务应用时的性能表现,以随机I /...

it168网站
2017/05/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

IDEA中package不能引入依赖的解决方法

在IDEA中, 使用maven打包。出现了package后没有将需要的依赖放入包中, 运行会抛出java.lang.NoClassDefFoundError的异常。 解决办法 在pom.xml中加入: <build> <plugins> ...

dreamness
8分钟前
0
0
IDEA模板

import com.google.common.collect.Lists;import java.util.List;/** * @author hll * @date 2019/5/26 - 13:12 */public class Demo { // 模板五 // prsf -- > ......

一只小青蛙
24分钟前
0
0
9.jackjson使用教程

1.导入相关jar <!-- 10.jackson --> <!--10.1 定义了底层的streaming API和实现了Json特性 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</art......

20190513
28分钟前
1
0
如何使用 rsync 备份 Linux 系统的一些介绍

备份一直是 Linux 世界的热门话题。回到 2017,David Both 为 Opensource.com 的读者在使用 rsync 备份 Linux 系统方面提了一些建议,在这年的更早时候,他发起了一项问卷调查询问大家,在 ...

Linux就该这么学
48分钟前
3
0
以太坊私有链搭建

https://blog.csdn.net/Blockchain_lemon/article/details/80589123

Moks角木
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部