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

  • 相关阅读:
    查看电脑电池报告
    git上传文件
    k8s 跨namespace的service相互访问
    Shell中的${},##和%%的使用
    如何去掉excel表格中的单引号?
    忘密码时系统如何添加新账户!
    使用windows 脚本更改电脑的IP地址
    如何让WIN10自动修改自己的门牌号(IP)呢?
    Win7系统电脑共享打印机提示0x000006d9错误代码怎么办?
    ps抠图技术汇总
  • 原文地址:https://www.cnblogs.com/duyinqiang/p/5696461.html
Copyright © 2011-2022 走看看