1. 程式人生 > 實用技巧 >SpringCloud05-SpringCloud Config

SpringCloud05-SpringCloud Config

SpringCloud Config

概述

分散式系統面臨的——配置檔案的問題

微服務意味著要將單體應用服務中的業務拆封成一個個子服務,每個服務的粒度相對較小,因此係統中會出現大量的服務,由於每個服務都需要必要的配置資訊才能執行,所以一套集中式的,動態的配置檔案管理設施是必不可少的。

SpringCloud提供了COnfigServer來解決這個問題,我們每一個微服務自己帶著一個application.yml。那上百個配置檔案要修改起來,豈不是要發瘋!

什麼是SpringCloud config分散式配置中心

SpringCloud config 為微服務架構中的微服務提供集中化的外部配置支援,配置伺服器為各個不同的微服務應用的所有環節提供了一箇中心化的外部配置。

SpringCloud config分為客戶端服務端

服務端也稱為分散式配置中心,它是一個獨立的微服務應用,用來連線配置伺服器並且為客戶端提供獲取配置資訊,加密,解密資訊等訪問介面。

客戶端則是通過指定的配置中心來管理應用資源,以及與業務相關的配置內容,並在啟動的時候從配置中心獲取和載入配置中心,配置伺服器預設採用git來儲存配置資訊,這樣就助於對環境進行版本管理,並且可以通過git客戶端來方便的管理和訪問配置中心。

服務端連線git配置

​ 1)匯入依賴

<dependencies>
    <!--config-->
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
    <version>2.1.1.RELEASE</version>
    </dependency>
    <!---->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
        <version>1.4.6.RELEASE</version>
    </dependency>
</dependencies>

​ 2)編寫配置

server:
  port: 3344

spring:
  application:
    name: springcloud-config-server
    #連線遠端倉庫
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/a8801/springcloud-config.git

​ 3)啟動

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

通過config-server,我們可以遠端訪問到git,訪問其中的資源以及配置

客戶端連線服務端連線遠端

​ 1)匯入依賴

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

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

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

​ 2)編寫配置

bootstrap.yml:系統級別的配置

application.yml:使用者級別的配置

# 系統級別的配置
spring:
  cloud:
    config:
      name: config-client  #需要從git上獲取的資源名稱,不用字尾
      profile: dev
      label: master
      uri: http://locahost:3344
# 使用者級別的配置
spring:
  application:
    name: springcloud-config-client-3355

​ 3)我們要保證拿到這個服務,需要編寫controller層

package com.mjh.springcloud.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ConfigController {
    @Value("${spring.application.name}")
    private String applicationName;
    @Value("${eureka.client.server-uri.defaultZone}")
    private String eurekaServer;
    @Value("${server.port}")
    private String port;

    @RequestMapping("/config")
    public String getConfig(){
        return "applicationName:"+applicationName+
         "eurekaServer:"+eurekaServer+
        "port:"+port;
    }  //如果為空說明從遠端拿不到值
}

​ 4)啟動

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