史上最簡單的SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)


一、簡介

在分布式系統中,由於服務數量巨多,為了方便服務配置文件統一管理,實時更新,所以需要分布式配置中心組件。

在Spring Cloud中,有分布式配置中心組件spring cloud config ,它支持配置服務放在配置服務的內存中(即本地),也支持放在遠程Git倉庫中。在spring cloud config 組件中,分兩個角色,一是config server,二是config client。

二、構建Config Server

創建一個spring-boot項目,取名為config-server,其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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>configserver</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>config-server</name>
    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.SR2</spring-cloud.version>
    </properties>

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

    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

在程序的入口Application類加上 @EnableConfigServer注解 開啟配置服務器的功能,代碼如下:

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

application.properties配置以下:

spring.application.name=config-server server.port=8888

#服務注冊中心
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
#服務的git倉庫地址,末尾加或不加".git"都可
spring.cloud.config.server.git.uri=https://gitee.com/xiaoliu66007/springcloud /*替換成自己的git地址*/
#配置文件所在的目錄
spring.cloud.config.server.git.searchPaths=/**/config /*替換成自己的git地址下的文件夾*/
#配置文件所在的分支 
spring.cloud.config.label=master
spring.cloud.config.server.git.username=******* /*替換成git賬號*/
spring.cloud.config.server.git.password=******* /*替換成git密碼*/

注意事項:

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

為了方便測試,我是在碼雲上自己上傳了 config-server-dev.properties文件到config文件夾下,如圖:

 

----------------------------------------------------------------------------注意事項完畢------------------------------------------------------------------------------------------------

config-server-dev.properties內容如下
foo = foo version 3

啟動程序:訪問http://localhost:8888/config-server/dev,其中的config-server和dev 參照下面的“http請求地址和資源文件映射:”

效果如下: 

 證明配置服務中心可以從遠程程序獲取配置信息。

接上面的注意事項,http請求地址和資源文件映射如下:

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

 

三、構建一個config client

 重新創建一個springboot項目,取名為config-client,其pom文件:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>config-client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>config-client</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.SR2</spring-cloud.version>
    </properties>

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

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

其配置文件bootstrap.properties:

server.port=8881
spring.application.name=config-server
spring.cloud.config.label=master
spring.cloud.config.profile=dev
spring.cloud.config.uri= http://localhost:8888/
  • spring.cloud.config.label 指明遠程倉庫的分支
  • spring.cloud.config.profile

    • dev開發環境配置文件
    • test測試環境
    • pro正式環境
  • spring.cloud.config.uri= http://localhost:8888/ 指明配置服務中心的網址。

程序的入口類,如下:
/**
 http://localhost:8881/hi可以訪問到配置中心config-server,通過配置中心訪問到遠程git地址下的"config-server-dev.properties"(詳見bootstrap.properties配置)
 bootstrap.properties文件指定讀取的文件為:
     “【spring.application.name】- 【spring.cloud.config.profile】.properties”
     即config-server-dev.properties
 */
package com.example.demo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class ConfigClientApplication {

   public static void main(String[] args) {
      SpringApplication.run(ConfigClientApplication.class, args);
   }
   @Value("${foo}")
   String foo;
   @RequestMapping(value = "/hi")
   public String hi(){
      return foo;
   }
}

訪問 http://localhost:8881/hi結果如下
foo version 3

這就說明,config-client從config-server獲取了name和age的屬性,而config-server是從git倉庫讀取的,如圖

本文源碼下載: 
https://github.com/forezp/SpringCloudLearning/tree/master/chapter6


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM