乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      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)的存儲方式來保存配置信息

      ?

        (3)在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。

        (4)創(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);
          }
      
      }

      ?

        (5)啟動工程,測試應(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
       ?。?)創(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>

      ?

        (2)編寫配置文件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);
          }
      
      }

      ?

        (4)啟動工程,測試應(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倉庫中不同版本配置信息。
       ?。?)配置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
       ?。?)修改服務(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屬性。
       ?。?)修改客戶端配置文件。在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/  # 配置中心的地址的地址

      ?

       ?。?)啟動工程,測試應(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í)行以下幾步。
       ?。?)在客戶端的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ā)表

        請遵守用戶 評論公約

        類似文章 更多