zoukankan      html  css  js  c++  java
  • Spring Cloud Config

    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

  • 相关阅读:
    MySpace你居然报黄页?
    ExtAspNet应用技巧(十三) 后台主页面(IFrame框架)
    ExtAspNet应用技巧(十七) 新增菜单
    ExtAspNet应用技巧(十九) 日志管理
    ExtAspNet应用技巧(二十四) AppBox之Grid数据库分页排序与批量删除
    ExtAspNet应用技巧(二十三) Ext4JSLint之Grid的使用
    ExtAspNet应用技巧(二十一) Ext4JSLint之整体框架
    ExtAspNet应用技巧(十六) 菜单管理
    ExtAspNet应用技巧(二十二) Ext4JSLint之JSON文件创建树控件
    ImageList控件的问题
  • 原文地址:https://www.cnblogs.com/duyinqiang/p/5696462.html
Copyright © 2011-2022 走看看