• 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

  • 相关阅读:
    速耀达数据库安装(速达二次开发)
    WCF错误:由于目标计算机积极拒绝,无法连接;127.0.0.1:3456
    HTTP 错误 403.14
    速耀达企业ERP试用说明流程
    速耀达ERP手机App开始内测,完全兼容速达5000以上的任何版本
    新版速云达App即将发布内测
    如何解决速达软件出现主键、单号、编码相同的报错
    NTP服务器搭建
    linux操作系统不重启添加raid0步骤
    反向代理负载均衡调度:nginx
  • 原文地址:https://www.cnblogs.com/duyinqiang/p/5696462.html
Copyright © 2020-2023  润新知