spring-cloud-config——Quick Start

null^發表於2017-11-25

參考資料:

  https://cloud.spring.io/spring-cloud-static/spring-cloud-config/1.4.0.RELEASE/single/spring-cloud-config.html

  http://cloud.spring.io/spring-cloud-static/Camden.SR7/#_spring_cloud_config

Spring Cloud Config為分散式系統中的外部配置提供服務端和客戶端的支援。使用Config Server,你可以在所有環境中管理應用程式的外部屬性。

客戶端和服務端上的概念和與Spring Environment和PropertySource相同,因此非常適合Spring應用程式,也可以與任何語言執行的應用程式一起使用。

當應用程式從開發到測試轉移到部署管道時,你可以管理這些環境之間的配置,以確保應用程式擁有遷移時所需的所有內容。伺服器儲存後端的預設實現使用git,因此它可以輕鬆支援配置環境的標記版本,並且可以通過各種工具來訪問內容。

特點:

Spring Cloud Config Server features:

  對於外部配置項(如name-value對或相同功能的YAML內容),提供了基於資源的HTTP介面;

  加密和解密屬性值(對稱或不對稱);

  使用@EnableConfigServer註解可以很容易將此伺服器嵌入到Spring Boot應用程式中。

Config Client features(for Spring  applications):

  繫結到配置伺服器,並使用遠端屬性資源來初始化Spring環境;

  加密和解密屬性值(對稱和非對稱)。

快速入門:

  啟動服務:

$ cd spring-cloud-config-server
$ ../mvnw spring-boot:run

  伺服器是一個Spring Boot應用程式,你可以從你的IDE執行它(main類是ConfigServerApplication).然後試著啟動一個客戶端:

$ curl localhost:8888/foo/development
{"name":"foo","label":"master","propertySources":[
  {"name":"https://github.com/scratches/config-repo/foo-development.properties","source":{"bar":"spam"}},
  {"name":"https://github.com/scratches/config-repo/foo.properties","source":{"foo":"bar"}}
]}

  查詢一個屬性資源的預設策略是克隆一個git倉庫(at spring.cloud.config.server.git.uri ) ,使用它去初始化一個 mini SpringApplication. 這個mini-application的Environment用來列舉屬性資源,並通過JSON節點發布它們。

   HTTP服務具有以下形式的資源:

/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties

  “applications”是SpringApplicationspring.config.name(一般來說application是一個常規的Spring Boot應用),"profile"是一個active的profile(或者是逗號分隔的屬性列表),label是一個可選的git標籤(預設為"master").

  Spring Cloud Config Server從git倉庫(必須提供)為遠端客戶端提取配置:

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/spring-cloud-samples/config-repo

  要在應用程式中使用這些功能,只需將其構建為一個依賴於 spring-cloud-config-client的Spring Boot應用程式。新增依賴最方便的方法是通過Spring Boot啟動器org.springframework.cloud:spring-cloud-starter-config. 對於Maven使用者還有一個父pom和BOM(spring-cloud-starter-parent),對於Gradle和Spring CLI使用者有一個Spring IO版本管理檔案。例如Maven的配置:

<parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>1.3.5.RELEASE</version>
       <relativePath /> <!-- lookup parent from repository -->
   </parent>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Brixton.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
           <plugin>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-maven-plugin</artifactId>
           </plugin>
    </plugins>
</build>

   <!-- repositories also needed for snapshots and milestones -->

   然後建立一個標準的Spring Boot應用程式,就像這個簡單的HTTP伺服器:

@SpringBootApplication
@RestController
public class Application {

    @RequestMapping("/")
    public String home() {
        return "Hello World!";
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

  執行時,它將從埠8888上的預設本地配置伺服器(如果它正在執行)中選取外部配置。要修改啟動行為,可以使用bootstrap.properties(類似於application.properties,但是是一個應用上下文啟動的配置檔案)更改配置伺服器的位置,例如:

spring.cloud.config.uri: http://myconfigserver.com

  引用屬性將作為高優先順序屬性源顯示在 /env 端點中,例如:

$ curl localhost:8080/env
{
  "profiles":[],
  "configService:https://github.com/spring-cloud-samples/config-repo/bar.properties":{"foo":"bar"},
  "servletContextInitParams":{},
  "systemProperties":{...},
  ...
}

  (名為“ConfigService:<遠端儲存庫的URL>/<檔名>”的屬性源包含了具有值"bar"的屬性"foo"並且是最高優先順序的)

note:屬性源名稱中的URL是git倉庫地址而不是配置伺服器的URL。

  

 

相關文章