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

  • 相关阅读:
    Pycharm软件更换pip默认安装源为国内安装源
    电商网站名词item>SKU与SPU
    Linux通过端口号查看使用进程结束进程
    window系统下的pycharm对虚拟机中的Ubuntu系统操作MySQL数据库
    JAVA项目常用的异常处理情况总结
    公文流转系统(未完成)
    《程序员修炼之道》读后感(三)
    Java文件操作递归遍历文件目录
    Java Web初试连接数据库完成学生信息录入
    JavaJFrame窗口实现新课程添加
  • 原文地址:https://www.cnblogs.com/duyinqiang/p/5696463.html
Copyright © 2011-2022 走看看