日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Spring Cloud Config 分布式配置管理 5.3

 印度阿三17 2019-07-17

Spring?Cloud?Config簡介

  在傳統(tǒng)的單體式應(yīng)用系統(tǒng)中,我們通常會將配置文件和代碼放在一起,但隨著系統(tǒng)越來越大,需要實現(xiàn)的功能越來越多時,我們又不得不將系統(tǒng)升級為分布式系統(tǒng),同時也會將系統(tǒng)的功能進行更加細化的拆分。拆分后,所有的服務(wù)應(yīng)用都會有自己的配置文件,當(dāng)需要修改某個服務(wù)的配置時,我們可能需要修改很多處,并且為了某一項配置的修改,可能需要重啟這個服務(wù)相關(guān)的所有服務(wù),這顯然是非常麻煩的。
  在傳統(tǒng)的單體式應(yīng)用系統(tǒng)中,我們通常會將配置文件和代碼放在一起,但隨著系統(tǒng)越來越大,需要實現(xiàn)的功能越來越多時,我們又不得不將系統(tǒng)升級為分布式系統(tǒng),同時也會將系統(tǒng)的功能進行更加細化的拆分。拆分后,所有的服務(wù)應(yīng)用都會有自己的配置文件,當(dāng)需要修改某個服務(wù)的配置時,我們可能需要修改很多處,并且為了某一項配置的修改,可能需要重啟這個服務(wù)相關(guān)的所有服務(wù),這顯然是非常麻煩的。
  Spring?Cloud?Config是Spring?Cloud團隊創(chuàng)建的一個全新的項目,該項目主要用來為分布式系統(tǒng)中的外部配置提供服務(wù)器(Config?Server)和客戶端(Config?Client)支持。
  ·服務(wù)器端(Config?Server):也被稱之為分布式配置中心,它是一個獨立的微服務(wù)應(yīng)用,主要用于集中管理應(yīng)用程序各個環(huán)境下的配置,默認使用Git存儲配置文件內(nèi)容,也可以使用SVN存儲,或者是本地文件存儲。
  ·客戶端(Config?Client):是Config?Server的客戶端,即微服務(wù)架構(gòu)中的各個微服務(wù)應(yīng)用。它們通過指定的配置中心(Config?Server)來管理應(yīng)用資源以及與業(yè)務(wù)相關(guān)的配置內(nèi)容,并在啟動時從配置中心獲取和加載配置信息。
  Spring?Cloud?Config的工作流程如圖5-17所示。

?



  在圖5-17中,用戶會先將配置文件推送到Git或SVN中,然后在微服務(wù)應(yīng)用(Config?Client)啟動時,會從配置中心(Config?Server)中獲取配置信息,而配置中心會根據(jù)配置從Git或SVN中獲取相應(yīng)的配置信息。

使用本地存儲的方式實現(xiàn)配置管理

  通過上一小節(jié)的學(xué)習(xí),我們已經(jīng)知道Spring?Cloud?Config支持本地、Git和SVN的存儲方式。接下來本小節(jié)將以本地存儲方式為例,講解Spring?Cloud?Config的使用。
  1.?搭建Config?Server
 ?。?)創(chuàng)建配置中心工程microservice-config-server,并在其pom.xml中引入Config?Server的依賴,如文件5-12所示。
  文件5-12 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven./POM/4.0.0" xmlns:xsi="http://www./2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven./POM/4.0.0 http://maven./xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.xc</groupId>
        <artifactId>xcservice-springcloud</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <groupId>com.xc</groupId>
    <artifactId>xcservice-config-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>xcservice-config-server</name>
    <description>配置管理</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency><!--Config Server的依賴-->
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</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>

</project>

?

 ?。?)編寫配置文件application.yml,添加服務(wù)端口號和存儲屬性等信息,如文件5-13所示。
  文件5-13 application.yml
server:
  port: 8888

spring:
  application:
    name: xcservice-config-server # 指定應(yīng)用名稱
  profiles:
    active: native # 使用本地文件系統(tǒng)的存儲方式來保存配置信息

?

 ?。?)在src/main/resources目錄下創(chuàng)建3個分別用于表示開發(fā)、預(yù)發(fā)布和測試的資源配置文件,并在文件中編寫如下內(nèi)容。
  ·application-dev.yml中編寫內(nèi)容:clientParam:native-dev-1.0
  ·application-prod.yml中編寫內(nèi)容:clientParam:native-prod-1.0
  ·application-test.yml中編寫內(nèi)容:clientParam:native-test-1.0
  上述資源文件是按照“應(yīng)用名 環(huán)境名 格式”的規(guī)范來命名的,其常見文件的命名方式如下:
   
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties

                  

  其中application表示的是應(yīng)用名稱,profile表示變化的文件,而label是可選的,表示Git的分支,默認是master。

 ?。?)創(chuàng)建啟動類,并在類上增加@EnableConfigServer注解以開啟服務(wù)端功能,如文件5-14所示。
  文件5-14 Application.java
package com.xc.xcserviceconfigserver;

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

/**
 * http://localhost:8888/microservice-config-server/dev
 * http://localhost:8888/application-dev.yml
 */
@EnableConfigServer
@SpringBootApplication
public class XcserviceConfigServerApplication {

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

}

?

 ?。?)啟動工程,測試應(yīng)用。應(yīng)用啟動成功后,按照如下格式的URL發(fā)起請求:
  http://localhost:8888/{applicationname}/{env}/{label}本應(yīng)用中的訪問地址為http://localhost:8888/microservice-config-server/dev,瀏覽器中的JSON信息顯示出了應(yīng)用名microservice-config-server、環(huán)境名dev,以及資源文件路徑和文件內(nèi)容等信息。
  除此之外,我們也可以直接訪問資源文件,來查看資源文件內(nèi)的配置信息。通過瀏覽器訪問地址http://localhost:8888/ap-plication-dev.yml

  2.?搭建Config?Client
  (1)創(chuàng)建客戶端工程microservice-config-client,并在其pom.xml中添加Config和Web的依賴,如文件5-15所示。
  文件5-15 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven./POM/4.0.0" xmlns:xsi="http://www./2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven./POM/4.0.0 http://maven./xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.xc</groupId>
        <artifactId>xcservice-springcloud</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <groupId>com.xc</groupId>
    <artifactId>xcservice-config-client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>xcservice-config-client</name>
    <description>Config Client</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</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>

</project>

?

 ?。?)編寫配置文件bootstrap.yml,在其中配置應(yīng)用名稱、服務(wù)中心地址、需要訪問的文件和端口號等信息,如文件5-16所示。
  文件5-16 bootstrap.yml
server:
  port: 8801

spring:
  application:
    name: xcservice-config-client
  cloud:
    config:
      profile: test # 配置服務(wù)中的{profile}
      uri: http://localhost:8888/  # 配置中心的地址

  需要注意的是,上述配置文件的名稱必須為bootstrap.yml或bootstrap.properties,只有這樣配置中心才能夠正常加載(雖然application.yml也可以被Spring?Boot加載,但是boot-strap.yml會優(yōu)先加載)。

  (3)創(chuàng)建啟動類,并在類上添加@RestController注解,編輯后如文件5-17所示。
  文件5-17 Application.java
package com.xc.xcserviceconfigclient;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Repository;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * http://localhost:8801/client-Param
 */
@SpringBootApplication
@RestController
public class XcserviceConfigClientApplication {

    @Value("${clientParam}")
    private String clientParam;

    @RequestMapping("/clientParam")
    public String getParam() {
        return this.clientParam;
    }

    /**
     * http://localhost:8801/hello
     *
     * @return
     */
    @RequestMapping("/hello")
    public String hello() {
        return "hello world";
    }

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

}

?

 ?。?)啟動工程,測試應(yīng)用。應(yīng)用啟動成功后,可以通過地址http://localhost:8801/hello測試應(yīng)用是否能夠正常訪問
  此時通過瀏覽器訪問地址http://localhost:8801/clientParam,即可獲取配置文件中的信息
  當(dāng)我們需要訪問其他配置文件的信息時,只需修改bootstrap.yml中的profile的屬性值即可。

使用Git存儲的方式實現(xiàn)配置管理

  Spring?Cloud?Config的服務(wù)端默認采用的是Git配置倉庫,通過Git可以非常方便地使用各種第三方工具來對其內(nèi)容進行更新管理和版本控制,并且Git倉庫的Webhooks功能還可以實時地監(jiān)控配置內(nèi)容的修改,所以使用Git存儲的方式是十分方便的。
  掌握了本地存儲方式的使用后,Git存儲方式的使用就很容易掌握了。下面我們同樣以上一小節(jié)的案例為例,來講解如何通過Spring?Cloud?Config的客戶端從服務(wù)端獲取Git倉庫中不同版本配置信息。
  (1)配置Git。在Git上創(chuàng)建xcservice-study-config目錄,并在目錄中增加開發(fā)、預(yù)發(fā)布和測試的配置文件,分別編輯三個文件中的內(nèi)容如下:
  ·application-dev.yml中編寫內(nèi)容:clientParam:git-dev-1.0
  ·application-prod.yml中編寫內(nèi)容:clientParam:git-prod-1.0
  ·application-test.yml中編寫內(nèi)容:clientParam:git-test-1.0
  (2)修改服務(wù)端配置文件。將xcservice-config-server工程的配置文件中本地文件存儲方式的配置刪除(或注釋),并添加git的配置信息,如文件5-18所示。
  文件5-18 application.yml
server:
  port: 8888

spring:
  application:
    name: xcservice-config-server # 指定應(yīng)用名稱
  #profiles:
  #  active: native # 使用本地文件系統(tǒng)的存儲方式來保存配置信息
  cloud:
    config:
      server:
        git: # 使用git的方式
          uri: https:///secret8/microservice-study-config.git

?

  在上述配置中,spring.cloud.config.server.git.uri屬性用來指定Git倉庫的網(wǎng)絡(luò)地址。由于這里配置的是公共倉庫,所以不需要填寫用戶名和密碼信息。如果是私有倉庫,則需要填寫賬號信息,此時可以在git屬性下增加username和password屬性。
  (3)修改客戶端配置文件。在xcservice-config-client工程的配置文件中添加屬性label,并將其屬性值設(shè)置為mas-ter(label屬性表示Git中的分支,其屬性默認值為master),編輯后如文件5-19所示。
文件5-19 bootstrap.yml
server:
  port: 8801

spring:
  application:
    name: xcservice-config-client
  cloud:
    config:
      profile: test # 配置服務(wù)中的{profile}
      label: master # 對應(yīng)git中的分支,默認為master
      uri: http://localhost:8888/  # 配置中心的地址的地址

?

  (4)啟動工程,測試應(yīng)用。分別啟動Spring?Cloud?Config的服務(wù)端和客戶端工程,通過訪問地址http://localhost:8801/clientParam,發(fā)現(xiàn)已經(jīng)可以獲取Git中的配置信息了

手動更新運行中的配置文件

  在實際項目應(yīng)用中,我們可能需要對配置文件的內(nèi)容做一些修改,而要想使修改的配置文件生效,通常做法是將應(yīng)用重啟。此種方式對于小型應(yīng)用,以及使用人數(shù)不多的應(yīng)用來說比較適用,但是對于大型企業(yè)和互聯(lián)網(wǎng)應(yīng)用來說,重啟應(yīng)用是行不通的。這也就要求運維人員在修改完應(yīng)用的配置后,要保證配置及時生效。Spring?Cloud?Config正好提供了這種功能,我們可以在客戶端用POST請求refresh方法來刷新配置內(nèi)容。
以上一小節(jié)的案例為例,要實現(xiàn)配置文件的實時更新,需要執(zhí)行以下幾步。
  (1)在客戶端的pom.xml中添加依賴spring-boot-starter-actuator。該依賴可以監(jiān)控程序在運行時的狀態(tài),其中包括/refresh的功能。pom.xml中添加的依賴信息如下:
<dependency><!--監(jiān)控程序在運行時的狀態(tài)-->
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

?

 ?。?)在啟動類上添加@RefreshScope注解,開啟refresh機制。添加此注解后,在執(zhí)行/refresh時會更新該注解標注類下的所有變量值,包括Config?Client從Git倉庫中所獲取的配置。
 ?。?)在配置文件中將安全認證信息的enabled屬性設(shè)置為false,其代碼如下:
management:
  security:
    enabled: false # 是否開啟actuator安全認證

?

  執(zhí)行完上述3步后,下面來檢測應(yīng)用是否可以實現(xiàn)更新運行中的配置文件。啟動應(yīng)用并訪問http://localhost:8801/clientParam
  此時修改Git中的配置文件application-prod.yml,將其內(nèi)容clientParam:git-prod-1.0,修改為clientParam:git-prod-2.0后,再次通過瀏覽器訪問上述地址,會發(fā)現(xiàn)瀏覽器的內(nèi)容并沒有變化,但通過地址  http://localhost:8888/application/prod訪問時,會發(fā)現(xiàn)服務(wù)器端已經(jīng)獲取到了Git中的更新配置信息
  使用POST請求訪問地址http://localhost:8801/refresh后,此時再次通過瀏覽器訪問http://localhost:8801/clientParam時,瀏覽器中已成功顯示了更新后的配置文件內(nèi)容,這也就說明我們已成功實現(xiàn)了手動更新運行中的配置文件。? ?來源:https://www./content-4-337051.html

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多