1. 程式人生 > >spring cloud Config--server

spring cloud Config--server

概述

使用Config Server,您可以在所有環境中管理應用程式的外部屬性。客戶端和伺服器上的概念對映與Spring EnvironmentPropertySource抽象相同,因此它們與Spring應用程式非常契合,但可以與任何以任何語言執行的應用程式一起使用。隨著應用程式通過從開發人員到測試和生產的部署流程,您可以管理這些環境之間的配置,並確定應用程式具有遷移時需要執行的一切。伺服器儲存後端的預設實現使用git,因此它輕鬆支援標籤版本的配置環境,以及可以訪問用於管理內容的各種工具。很容易新增替代實現,並使用Spring配置將其插入

以上是Spring Cloud官網對配置服務的描述, 簡單闡述一下我的理解。比如我們要搭建一個網站,需要配置資料庫連線,指定資料庫伺服器的IP地址,資料庫名稱,使用者名稱和口令等資訊。通常的方法, 我們可以在一個配置檔案中定義這些資訊,或者開發一個頁面專門配置這些東西。只有一個web伺服器的時候, 很方便。

但假如需要搭建同多臺伺服器時,當然可以每臺伺服器做同樣配置,但維護和同步會很麻煩。我理解的配置服務至少有兩種不同場景:

1).  多個客戶使用同一配置: 比如,多臺伺服器組成的叢集,假如後端使用同一資料庫,那麼每臺伺服器都是用相同的配置。

2).  不同客戶使用不同的配置: 比如典型的場景是,開發,測試,生產使用相同的系統,但使用不同的資料庫

如果有個統一的根本配置,是不是就很方便,一個可行的辦法是,把這些配置檔案放到一個共享儲存(比如網路共享盤)中。這樣只需要在共享儲存修改一個或多個配置檔案就可以了。但共享檔案的方式受到具體佈署環境的限制,很多時候很難達到多臺Web伺服器共享同一個儲存硬碟。

共享盤的缺點是資源定位比較困難,Spring Cloud的解決方案是, 將這些配置檔案放到版本管理伺服器裡面,Spring Cloud預設配置使用GIT中。所有Web服務均從GIT中獲取這些配置檔案。由於GIT伺服器與具體Web伺服器之間不需要共享儲存, 只要網路可達就行,從而可以實現Web服務於配置資訊的存放位置的解耦。

其架構原理圖大致如下:

這裡寫圖片描述

我們將配置檔案放入git或者svn等服務中,通過一個Config Server服務來獲取git中的配置資料,而我們需要使用的到配置檔案的Config Client系統可以通過Config Server來獲取對應的配置。

下面我們通過一個示例來演示一下config是如何被各個微服務系統獲取到的。

1.向git中上傳示例配置檔案

multiple-test.properties

#datasource -- mysql
multiple.datasource.master.url=jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
multiple.datasource.master.username=root
multiple.datasource.master.password=pypua
multiple.datasource.master.driverClassName=com.mysql.jdbc.Driver
multiple.datasource.master.InitialSize=10
multiple.datasource.master.MinIdle=10
multiple.datasource.master.MaxActive=100

multiple.datasource.slave.url=jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
multiple.datasource.slave.username=root
multiple.datasource.slave.password=pypua
multiple.datasource.slave.driverClassName=com.mysql.jdbc.Driver
multiple.datasource.slave.InitialSize=10
multiple.datasource.slave.MinIdle=10
multiple.datasource.slave.MaxActive=100

檔名分別為:

microservice-dev.properties
microservice-production.properties
microservice-test.properties

對應不同的三個環境。其中命名規則如下

onfig server提供的REST介面,Spring Cloud官方文件提供了幾個可選URL可以是如下幾個:

  1. /{application}/{profile}[/{label}]
  2. /{application}-{profile}.yml
  3. /{label}/{application}-{profile}.yml
  4. /{application}-{profile}.properties
  5. /{label}/{application}-{profile}.properties

比如 第三個格式,如果我們在GIT版本庫中有一個配置檔案 spring-cloud/helloworldConfig/config-client-dev.properties. 那麼訪問http://localhost:8888/config-client-dev.properties就可以顯示配置檔案內容。這個例子中, application的名字是"config-client"(也是下面我們即將建立的client), profile名字是dev, 檔案字尾是.properties

 

2.建立springcloud-configserver微服務(這裡需要註冊到eureka服務,配合eureka使用)

父專案pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!-- 父專案骨架 -->
    <groupId>com.pupeiyuan.springcloud</groupId>
    <artifactId>spring-Cloud</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <!-- 包含的子專案 -->
    <modules>
        <module>springcloud-eureka</module>
        <module>springcloud-configServer</module>
        <module>springcloud-configClient</module>
        <module>springcloud-ssmServer</module>
    </modules>
    <!-- java版本資訊 -->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <!-- springboot以來的父專案 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.RELEASE</version>
    </parent>

    <dependencyManagement>
        <dependencies>
            <!-- springcloud版本依賴 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.SR3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <!-- maven外掛 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

 

專案pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.pupeiyuan.springcloud</groupId>
        <artifactId>spring-Cloud</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>springcloud-configServer</artifactId>

    <dependencies>
        <!--Spring Cloud Config 服務端依賴 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
    </dependencies>
</project>

 

aaplication.yml

server:
  port: 8080
spring:
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/admin_pypua/test.git  #uri:表示你配置檔案在git中的地址
          username: 
          password: 
  application:
    name: pringcloud-configServer
    
eureka:
  client:
    serviceUrl:
      defaultZone: http://root:1[email protected]:8000/eureka
  instance:
    prefer-ip-address: true

 

啟動類 ConfigServerApplication.java

package com.spring.pupeiyuan;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.config.server.EnableConfigServer;

@SpringBootApplication
@EnableConfigServer
@EnableDiscoveryClient
public class ConfigServerApplication {
  public static void main(String[] args) {
    SpringApplication.run(ConfigServerApplication.class, args);
  }
}

 

3.這樣一個單點config server就寫好了下面啟動測試一下

 

至此,單點config部署完畢