SpringCloud Config 配置(基於Consul)

一,構建配置中心git

  1.在pom.xml文件中添加相關依賴 web

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

  </dependencies>

  

  2.在SpringBoot程序主類上添加@EnableConfigServer註解, 開啓SpringCloud Config的服務端功能spring

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

  

  3.在application.properties中添加相關配置信息bootstrap

  spring.application.name=config-server
  server.port=7001
  #Git倉庫位置   spring.cloud.config.server.git.uri=https://gitee.com/*****/config-properties.git   #指定Git倉庫路徑下的文件夾   spring.cloud.config.server.git.search-paths=myconfig   spring.cloud.config.server.git.username=username   spring.cloud.config.server.git.password=password   #指定Git分支   spring.cloud.config.label=dev

  

  4.URL調用查看配置是否生效安全

    (1) /{application}/{profile}[/{label}]
服務器

    (2) /{application}-{profile}.ymlapp

  上面的url會映射{application}-{profile}.properties對應的配置文件,其中{label}對應Git不一樣的分支, 默認爲master.ide

  查看Git項目中的application-myproject.properties文件中的內容, 調用http://localhost:7001/application/myproject或http://localhost:7001/application/myproject/masterspring-boot

{
    "name": "application",
    "profiles": ["myproject"],
    "label": null,
    "version": "",
    "state": null,
    "propertySources": [{
        "name": "https://gitee.com/****/config-properties.git/master/application-myproject.properties",
        "source": {
            "server.servlet.context-path": "/myproject",
            "server.port": "7002",
            "spring.application.name": "myproject",
            "spring.cloud.consul.host": "localhost",
            "spring.cloud.consul.port": "8500",
            "spring.cloud.consul.discovery.health-check-path": "${server.servlet.context-path}/healthcheck",
            "spring.cloud.consul.discovery.register": "true"
        }
    }]
}

  配置服務器在從Git中獲取配置信息後, 會存儲一份在 config-server 的文件系統中, 實質上 config-server 是經過 git clone 命令將配置內容複製了一份在本地存儲, 而後讀取這些內容並返回給微服務應用進行加載.微服務

  config-server 經過 Git 在本地庫暫存,能夠有效防止 Git 倉庫出現故障而引發沒法加載配置信息的狀況. 

 

二.客戶端配置映射

  1.在pom.xml文件中添加相關依賴 

         <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>    
     <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-consul-discovery</artifactId>
     </dependency>

  2.建立SpringBoot的應用主類

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

  3.建立boostrap.properties配置,來指定獲取配置文件的config-server位置

  spring.cloud.config.enabled=true

  #配置中心config-server的地址
  spring.cloud.config.uri=http://127.0.0.1:23001/

  #對應配置文件規則中的{application}部分
  spring.cloud.config.name=application

  #對應配置文件規則中的{profile}部分
  spring.cloud.config.profile=order

  #Git分支
  spring.cloud.config.label=dev
  spring.cloud.config.username=q741622318@163.com
  spring.cloud.config.password=bananas66424

  SpringBoot對配置文件的加載順序, 本應用jar報以外的配置文件加載會優先於應用jar包內的配置內容, 而經過bootstrap.properties對config-server的配置, 使得該應用從config-server中獲取一些外部配置信息, 這些信息的優先級比本地的內容要高, 從而實現外部化配置.

 

三.服務端詳解

    (1)Git倉庫的Hook功能能夠幫助咱們實時監控配置內容的修改.

    (2)佔位符配置URI

      {application}, {profile}, {label}這些佔位符除了用於標識配置文件的規則以外, 還能夠用於 Config Server 中對 Git 倉庫地址的URI配置.

      好比經過{application}佔位符來實現同時匹配多個不一樣服務的配置倉庫

     spring.cloud.config.server.git.uri=https://gitee.com/*****/{application}-properties.git

      又好比經過{application}佔位符實現一個應用一個目錄的效果

     spring.cloud.config.server.git.search-paths={application}

    (3)屬性覆蓋

      Config Server 有"屬性覆蓋"的特性, 它可讓開發人員爲全部的應用提供配置屬性, 只須要經過 spring.cloud.config.server.overrides 屬性來設置鍵值對的參數, 這些參數會以 Map 的方式加載到客戶端的配置中. 好比:

    spring.cloud.config.server.overrides.name=userstring

    (4)安全保護

      因爲咱們的微服務應用和配置中心都構建於 Spring Boot 基礎上,因此與 Spring Security 結合使用會更加方便.

      在 pom.xml 中引入依賴後,不須要任何其餘改動就能實現對配置中心訪問的安全保護.

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

      在配置文件中指定用戶和密碼, 好比:

    security.user.name=user
    security.user.password=37CC5635-559b-4e6f-b633-7e932b813f73

      因爲咱們已經爲 config-server 設置了安全保護, 須要在客戶端中加入安全信息才能夠正常訪問服務端.

    

    spring.cloud.config.username=user
    spring.cloud.config.password=37CC5635-559b-4e6f-b633-7e932b813f73

    (5)加密解密

      使用加密解密功能時, 須要在配置中心的運行環境中安裝不限長度的JCE版本. 咱們能夠從Oracle 的官方網站下載, 它是一個壓縮包,解壓後能夠看到下面三個文件:

     README.TXT
     local_policy.jar
     US_export_policy.jar

      以後將 local_policy.jar 和 US_export_policy.jar 兩個文件複製到$JAVA_HOME/jre/lib/security 目錄下.

      再配置加密數據, 以下:

    spring.datasource.username=user
    spring.datasource.password={cipher}dba650baa81d78bd08799d8d4429de499bd4c2053c05f029e7cfbf143695f5b

      經過在屬性值前使用{cipher}前綴來標註該內容爲加密值, 當微服務客戶端加載配置時, 配置中心會自動爲帶有{cipher}前綴的值進行解密.

相關文章
相關標籤/搜索