天天看點

SpringCloud(四) config

Spring Cloud Config

在分布式系統中,尤其是當我們的分布式項目越來越多,每個項目都有自己的配置檔案,對配置檔案的統一管理就成了一種需要,而 Spring Cloud Config 就提供了對各個分布式項目配置檔案的統一管理支援。

它包含 Client和 Server 兩個部分,Server 提供配置檔案的存儲、以接口的形式将配置檔案的内容提供出去,Client 通過接口擷取資料、并依據此資料初始化自己的應用。

建構 Springcloud config 配置中心

1、建立 Spring Boot 項目并添加如下依賴:

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

2、在入口類上添加注解 @EnableConfigServer

3、在 application.yml中配置一下 git 倉庫資訊,這裡使用的是gitee碼雲,需要先在 gitee上 建立一個 spring-cloud-config 的項目

server:
  port: 3721
spring:
  application:
    name: springcloud-config-server
  cloud:
    config:
      server:
        git:
          uri: 
          search-paths: config-center
          username: 
          password: 
           
  • uri 表示配置中心所在倉庫的位置
  • search-paths 表示倉庫下的子目錄
  • username 表示你的 gitee 使用者名
  • password 表示你的 gitee 密碼

建構 Springcloud config 配置中心倉庫

首先在本地建立一個檔案夾,然後在裡面建立一個檔案夾叫 config-center,然後在 config-center中建立四個配置檔案,如下:

application.properties
application-dev.properties
application-test.properties
application-online.properties
           

并分别寫:

url=http://www.*.com
url=http://www.dev.com
url=http://www.test.com
url=http://www.online.com
           

将本地檔案推送到遠端倉庫:

git init # 初始化
git add config-center/ # 将檔案添加到暫存區
git commit -m 'add config-center' # 把檔案送出到本地倉庫
git remote add origin https://github.com/hnylj/spring-cloud-config.git # 添加遠端主機
git push -u origin master # 将本地的 master 分支推送到 origin 主機
           

啟動配置中心,通過/{application}/{profile}/{label}通路配置檔案,

  • {application} 表示配置檔案的名字,對應的配置檔案即 application,
  • {profile} 表示環境,有 dev、test、online 及預設,
  • {label} 表示分支,預設我們放在 master 分支上

通路http://localhost:3721/application/dev/master,傳回結果:

{
    "name":"application",
    "profiles":[
        "dev"
    ],
    "label":"master",
    "version":"4ac223e179ba14cd15079e8f486cc69a5d3a7a43",
    "state":null,
    "propertySources":[
        {
            "name":
            "source":{
                "url":"http://www.dev.com"
            }
        },
        {
            "name":
            "source":{
                "url":"http://www.*.com"
            }
        }
    ]
}
           

建構 Springcloud config 配置中心用戶端

  1. 建立一個Spring Boot 工程 springcloud-config-client,并添加依賴:
    <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
               
  2. 建立 bootstrap.yml 檔案,用于擷取配置資訊
    spring:
      application:
        name: application
      cloud:
        config:
          profile: dev
          label: master
          uri: http://localhost:3721/
               
    • uri:配置中心位址
  3. 建立一個 Controller 進行測試:
    @RestController
    public class ConfigController {
        @Value("${url}")
        private String      url;
        @Autowired
        private Environment env;
    
        @RequestMapping("/cloud/url")
        public String url1 () {
            return this.url;
        }
        @RequestMapping("/cloud/url2")
        public String url2 () {
            return env.getProperty("url");
        }
    }
               
    通路:localhost:3722/cloud/url
SpringCloud(四) config

Springcloud config 的工作原理

  1. 首先需要一個遠端 Git 倉庫,平時測試可以使用 GitHub,在實際生産環境中,需要自己搭建一個 Git 伺服器,遠端 Git 倉庫的主要作用是用來儲存我們的配置檔案;
  2. 除了遠端 Git 倉庫之外,我們還需要一個本地 Git 倉庫,每當 Config Server通路遠端 Git 倉庫時,都會克隆一份到本地,這樣當遠端倉庫無法連接配接時,就直接使用本地存儲的配置資訊;
  3. 微服務 A、微服務 B 則是我們的具體應用,這些應用在啟動的時會從 Config Server 中擷取相應的配置資訊;
  4. 當微服務 A、微服務 B 嘗試從 Config Server 中加載配置資訊的時候,Config Server 會先通過 git clone 指令克隆一份配置檔案儲存到本地;
  5. 由于配置檔案是存儲在 Git 倉庫中,是以配置檔案天然具有版本管理功能。

Springcloud config 的安全保護

生産環境中我們的配置中心肯定是不能随随便便被人通路的,我們可以加上适當的保護機制,由于微服務是建構在 Spring Boot 之上,是以整合 Spring Security是最友善的方式。

  1. 在配置中心添加:
    <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
               
  2. 在 配置中心目的 application.yml 中配置使用者名密碼:
    spring: 
        security:
            user:
              name: author
              password: 123
               
  3. 在配置中心用戶端的 bootstrap.yml 中:
    spring:
      application:
        name: application
      cloud:
        config:
          profile: dev
          label: master
          uri: http://localhost:3721/
          username: author
          password: 123
               
  4. 直接通路http://localhost:3721/application/dev/master:
    SpringCloud(四) config
    需要輸入使用者名、密碼才能就通路
  5. 内部通路:localhost:3722/cloud/url,可以通路成功
    SpringCloud(四) config

繼續閱讀