Spring Cloud Config provides server and client-side support for externalized configuration in a distributed system.

Spring Cloud Config Quick Start Page

1. Preparation

Install Spring boot by following Spring boot getting started

Linux for example:

  1. Install Groovy Environment Manager
  2. $ gvm install springboot
  3. $ spring --version
  4. Spring Boot v1.2.5.RELEASE

A simple sample for Spring boot as below:

  1. package hello;
  2. import org.springframework.boot.*;
  3. import org.springframework.boot.autoconfigure.*;
  4. import org.springframework.stereotype.*;
  5. import org.springframework.web.bind.annotation.*;
  6. @Controller
  7. @EnableAutoConfiguration
  8. public class SampleController {
  9. @RequestMapping("/")
  10. @ResponseBody
  11. String home() {
  12. return "Hello World!";
  13. }
  14. public static void main(String[] args) throws Exception {
  15. SpringApplication.run(SampleController.class, args);
  16. }
  17. }

Git Clone the Sample Code of Srping Cloud Config

https://github.com/spring-cloud/spring-cloud-config/tree/1.0.2.RELEASE

.
├── docs
├── Guardfile
├── pom.xml
├── README.adoc
├── sample.groovy
├── spring-cloud-config-client
├── spring-cloud-config-sample
└── spring-cloud-config-server

2. The basic architecture of Spring Cloud Config

Setup Tips

  1. Start Config Server first
  2. Then start client app.
  3. After Config Server is down, Cient still works.
  4. Restarting Config Server will re-clone git properties
  5. use POST method instead of GET for curl command above

Setup Config Server

1. Start and visit config server

  1. $ cd spring-cloud-config-server
  2. $ mvn spring-boot:run
  3. $ curl localhost:8888/foo/default
  4. $ curl localhost:8888/foo/development
  5. {"name":"development","label":"master","propertySources":[
  6. {"name":"https://github.com/scratches/config-repo/foo-development.properties","source":{"bar":"spam"}}, # The priority of foo-development.properties is higher than foo.properties
  7. {"name":"https://github.com/scratches/config-repo/foo.properties","source":{"foo":"bar"}}
  8. ]}

localhost:8888/foo/development is following this convention:

/{application}/{profile}[/{label}]
application: foo
profile: development (environment like develop/qa/release/production)
label: "master" (master branch by default)

Explain more below.

2. Configurations in config server

  1. /spring-cloud-config-server$ tree
  2. .
  3. ├── pom.xml
  4. ├── src
  5. │   ├── main
  6. │   │   ├── java
  7. │   │   └── resources
  8. │   │   ├── configserver.yml

The content of the configserver.yml

  1. info:
  2. component: Config Server
  3. spring:
  4. application:
  5. name: configserver
  6. jmx:
  7. default_domain: cloud.config.server
  8. cloud:
  9. config:
  10. server:
  11. git:
  12. uri: https://github.com/spring-cloud-samples/config-repo
  13. repos:
  14. - patterns: multi-repo-demo-*
  15. uri: https://github.com/spring-cloud-samples/config-repo
  16. server:
  17. port: 8888
  18. management:
  19. context_path: /admin

The content of the git repository https://github.com/spring-cloud-samples/config-repo:

  1. .
  2. ├── application.yml
  3. ├── bar.properties
  4. ├── configserver.yml
  5. ├── eureka.yml
  6. ├── foo-development.properties
  7. ├── foo.properties
  8. ├── processor.yml
  9. ├── samplebackendservice-development.properties
  10. ├── samplebackendservice.properties
  11. ├── samplefrontendservice.properties
  12. ├── stores.yml
  13. └── zuul.properties

Will be cloned to /tmp/config-repo-{id} in Linux

localhost:8888/foo/development refer to foo-development.properties 

localhost:8888/foo/default refer to foo.properties

Updating git repostiory will reflect to localhost:8888 like /tmp/config-repo-{id}

3. Client Side Usage

Simple structure for client side.

  1. ├── pom.xml
  2. ├── src
  3. │   ├── main
  4. │   │   ├── java
  5. │   │   │   └── sample
  6. │   │   │   └── Application.java
  7. │   │   └── resources
  8. │   │   ├── application.yml
  9. │   │   └── bootstrap.yml
  1. $ cd spring-cloud-config-sample
  2. $ mvn spring-boot:run

spring-cloud-config-sample/pom.xml

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>1.2.3.RELEASE</version>
  5. <relativePath /> <!-- lookup parent from repository -->
  6. </parent>
  7. <dependencyManagement>
  8. <dependencies>
  9. <dependency>
  10. <groupId>org.springframework.cloud</groupId>
  11. <artifactId>spring-cloud-starter-parent</artifactId>
  12. <version>1.0.1.RELEASE</version>
  13. <type>pom</type>
  14. <scope>import</scope>
  15. </dependency>
  16. </dependencies>
  17. </dependencyManagement>
  18. <dependencies>
  19. <dependency>
  20. <groupId>org.springframework.cloud</groupId>
  21. <artifactId>spring-cloud-starter-config</artifactId>
  22. </dependency>
  23. <dependency>
  24. <groupId>org.springframework.boot</groupId>
  25. <artifactId>spring-boot-starter-test</artifactId>
  26. <scope>test</scope>
  27. </dependency>
  28. </dependencies>
  29. <build>
  30. <plugins>
  31. <plugin>
  32. <groupId>org.springframework.boot</groupId>
  33. <artifactId>spring-boot-maven-plugin</artifactId>
  34. </plugin>
  35. </plugins>
  36. </build>
  37. <!-- repositories also needed for snapshots and milestones -->

Main Client class:

spring-cloud-config-sample/src/main/java/sample/Application.java

  1. @Configuration
  2. @EnableAutoConfiguration
  3. public class Application {
  4. public static void main(String[] args) {
  5. SpringApplication.run(Application.class, args);
  6. }
  7. }

spring-cloud-config-sample/src/main/resources/bootstrap.yml

  1. spring:
  2. application:
  3. name: bar
  4. cloud:
  5. config:
  6. env: default # optional
  7. label: master # optional
  8. uri: http://localhost:${config.port:8888}

where it specifies application name bar and the uri of spring cloud config server.

  1. $ curl localhost:8080/env
  2. {
  3. "profiles":[],
  4. "configService:https://github.com/scratches/config-repo/bar.properties":{"foo":"bar"},
  5. "servletContextInitParams":{},
  6. "systemProperties":{...},
  7. ...
  8. }

Usage:

1. Get/Refresh properties (Fetch value on request API call)

  1. $ curl localhost:8080/env/foo
  2. bar
  3. $ vi /tmp/config-repo-{id}/bar.properties
  4. .. change value of "bars"
  5. $ curl -X POST localhost:8080/refresh
  6. ["foo"]
  7. $ curl localhost:8080/env/foo
  8. bars

2. Usage of ClientAppClass

  1. package demo;
  2. import org.springframework.beans.factory.annotation.Value;
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
  5. import org.springframework.context.annotation.ComponentScan;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.RestController;
  8. @EnableAutoConfiguration
  9. @ComponentScan
  10. @RestController
  11. public class ClientApp {
  12. @Value("${bar:World!}")
  13. String bar;
  14. @RequestMapping("/")
  15. String hello() {
  16. return "Hello " + bar + "!";
  17. }
  18. public static void main(String[] args) {
  19. SpringApplication.run(ClientApp.class, args);
  20. }
  21. }

You can also see a single property.

$ curl http://localhost:8080/env/bar
123456

When you access to the controller,

$ curl http://localhost:8080
Hello 123456!

you can find the property on Config Server is injected.

See more usage samples here: http://qiita.com/making@github/items/704d8e254e03c5cce546

Spring Cloud Config的更多相关文章

  1. spring cloud config 入门

    简介 Spring cloud config 分为两部分 server client config-server 配置服务端,服务管理配置信息 config-client 客户端,客户端调用serve ...

  2. Spring Cloud官方文档中文版-Spring Cloud Config(上)

    官方文档地址为:http://cloud.spring.io/spring-cloud-static/Dalston.SR2/#spring-cloud-feign 文中例子我做了一些测试在:http ...

  3. Spring Cloud官方文档中文版-Spring Cloud Config(下)-客户端等

    官方文档地址为:http://cloud.spring.io/spring-cloud-static/Dalston.SR2/#_serving_alternative_formats 文中例子我做了 ...

  4. SpringCloud的配置管理:Spring Cloud Config

    演示如何使用ConfigServer提供统一的参数配置服务 ###################################################################一.概 ...

  5. 搭建spring cloud config

    很久没更新了,因为不是专职研究spring cloud,因此更新速度得看工作强度大不大,每天能抽出的时间不多,如果更新太慢了,并且有小伙伴看的话,请见谅了. Spring Cloud简介 Spring ...

  6. Spring Cloud Config - RSA简介以及使用RSA加密配置文件

    简介 RSA非对称加密有着非常强大的安全性,HTTPS的SSL加密就是使用这种方法进行HTTPS请求加密传输的.因为RSA算法会涉及Private Key和Public Key分别用来加密和解密,所以 ...

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

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

  8. 【spring实战第五版遇到的坑】第14章spring.cloud.config.uri和token配置项无效

    本文使用的Spring Boot版本为:2.1.4.RELEASE Spring Cloud版本为:Greenwich.SR1 按照书上的做法,在application.yml中配置配置服务器的地址和 ...

  9. .NET Core微服务之基于Steeltoe使用Spring Cloud Config统一管理配置

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 =>  Steeltoe目录快速导航: 1. 基于Steeltoe使用Spring Cloud Eureka 2. 基于Steelt ...

随机推荐

  1. hdu 4779 Tower Defense 2013杭州现场赛

    /** 题意: 有两种塔,重塔,轻塔.每种塔,能攻击他所在的一行和他所在的一列, 轻塔不 能被攻击,而重塔可以被至多一个塔攻击,也就是说重塔只能被重塔攻击.在一个n*m 的矩阵中,最少放一个塔,可放多 ...

  2. NSData 数据转换

    NSData,数据,当我们需要把一些信息写入到文件里或发送到网络上,我们需要把这些数据转换下,变成纯粹的0.1字符流 数组转 NSData NSData *GLYtime = [NSKeyedArch ...

  3. 转: seajs手册与文档之 -- 快速参考 ( ~~useful )

    目录 快速参考 seajs.use seajs.config define require require.async exports module.exports 快速参考 该页面列举了 SeaJS ...

  4. vs2010根据字符串内容添加断点

    在vs中我们可以直接用表达式.数值型比较直接用操作符即可. 如i==2,i<2; 但是字符型比较呢? 加入我们有一个名为string的变量,定义如下: char *string="Tw ...

  5. [置顶] 我的GB28181标准开发里程碑——基于eXosip的IPC端与SPVMN注册成功

    昨天编译搭建好eXosip的开发环境后,今天完成了SIP注册功能,里程碑一战啊!加油加油,成功就在眼前! 今天基于eXosip做了一个IPC客户端,成功与公安部的SPVMN视频监控联网调测软件自测工具 ...

  6. Treap的读书笔记2

    近期開始了自己高级数据结构之旅,在这次旅行中.我将持续把一些高级的数据结构从理论到编码都过一遍,同一时候通过博客形式分享出来.希望大家指出不足之处! 二叉排序树是一种动态排序的数据结构.支持插入.删除 ...

  7. c++特殊函数

    C++中NULL不能写作小写,NULL的值为零,也可以写作0 在自己写的复制构造函数中不改变原对象,所以传进来的参数可以设为const类型的,这样可以保证传进来的对象不被改变 比如A(const A ...

  8. POJ1985 DFS【STL__vector_的应用】

    vector     向量 相当于一个数组    在内存中分配一块连续的内存空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacit ...

  9. 432B - Football Kit

    解题思路: 暴力绝对TLE 一个队伍穿主场球衣的次数 = 这个队伍的客场球衣颜色与其他队主场球衣颜色起冲突的次数 + (n - 1) #include <stdio.h> #include ...

  10. 利用SolrJ操作solr API完成index操作

    使用SolrJ操作Solr会比利用httpClient来操作Solr要简单.SolrJ是封装了httpClient方法,来操作solr的API的.SolrJ底层还是通过使用httpClient中的方法 ...