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

  • 相关阅读:
    PHP断点续传(下载)代码
    PHP及相关服务器防盗链
    工作过程中注意事项(一)
    ubuntu下libtorrent库安装
    ubuntu ftp 服务器搭建
    ubuntu系统搭建php+apache+cumulusclips
    JavaScript HTML DOM 元素(节点)
    JavaScript 闭包
    安装安卓(Android)x86系统
    javascript 错误与调试
  • 原文地址:https://www.cnblogs.com/duyinqiang/p/5696463.html
Copyright © 2011-2022 走看看