1. 程式人生 > >Spring Cloud 之 配置中心 Spring Cloud Config

Spring Cloud 之 配置中心 Spring Cloud Config

微服務架構下服務多了配置檔案多,為了方便統一管理配置,可以使用Spring Cloud Config集中管理。
可以從本地倉庫讀取配置檔案,也可以從Git倉庫獲取。本地倉庫的話就是把所有配置檔案放在你的Config Server 工程下面,Git的話就新建一個專門放配置檔案的倉庫就好了。

一、構建Config Server

在前面工程的基礎上,本節新建兩個model工程,Config Server 和 Config Client。
先演示從Git倉庫讀取配置
新建model:config-server
pom.xml

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

在應用主類添加註解:

@SpringBootApplication
@EnableConfigServer
@EnableEurekaClient
public class ConfigApplication {

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

配置檔案application.yml

eureka:
  client:
    serviceUrl:
      # 註明自己的服務註冊中心的地址
defaultZone: http://localhost:7777/eureka/ server: port: 9999 spring: application: name: config-server cloud: config: server: git: # 在github上新建一個倉庫(springCloudConfigServer)存放配置檔案 # 直接訪問檔案瀏覽器也能輸出值 http://localhost:9999/config-client-dev.properties uri: https://github.com/MistraR/springCloudConfigServer # springCloudConfigServer倉庫下的配置檔案訪問路徑 search-paths: /** #訪問git倉庫的使用者名稱 username: MistraR password: ****** # 配置倉庫的分支 label: master

建立Git倉庫及檔案
這裡寫圖片描述
這裡寫圖片描述

二、構建Config Client

新建model:config-client
pom.xml

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

應用主類添加註解,新增測試方法:

@SpringBootApplication
@RestController
@EnableEurekaClient
public class ClientApplication {

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

    /**
     * config-client從config-server獲取了name的屬性,而config-server是從git倉庫讀取的
     */
    @Value("${name}")
    String name;

    @RequestMapping(value = "/hi")
    public String hi() {
        return name;
    }
}

配置檔案application.yml

eureka:
  client:
    serviceUrl:
      # 註明自己的服務註冊中心的地址
      defaultZone: http://localhost:7777/eureka/
server:
  port: 9998
spring:
  application:
    name: config-client
  cloud:
    config:
      label: master
      #dev開發環境配置檔案,test測試環境,pro正式環境
      profile: dev
      uri: http://localhost:9999/
      discovery:
        #從配置中心讀取檔案
        enabled: true
        # 配置中心的serviceId,即服務名
        service-id: config-server

三、測試

啟動eureka-server,config-server,config-client。
訪問:http://localhost:9998/hi
瀏覽器輸出了name屬性的值:RoronoaZoro
config-client從config-server取值,config-server從Git倉庫讀取檔案取值。

四、從本地倉庫讀取配置檔案

config-server工程的依賴包和應用主類上註解不變,配置檔案稍作修改
application.yml

server:
  port: 9999
spring:
  cloud:
    config:
      server:
        #指定從本地讀取配置檔案,resources/configFile
        native:
          search-locations: classpath:/configFile
        #其他服務配置檔案的命名格式{applicationName}-{activeProfile}.yml如:user-service-pro.yml
        #所有服務可以共享一個配置檔案,在configFile下新建一個application.yml
  profiles:
    #指定從本地讀取配置檔案
     active: native
  application:
    name: config-server

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:9999/eureka/

在resources資料夾下新建目錄configFile,存放所有的配置檔案
這裡寫圖片描述
注意configFile目錄下的application.yml檔案,一些公共配置就可以寫在這裡,因為其他的服務讀取配置檔案的時候,除了讀取自己服務的配置檔案,還會讀取這個檔案的配置。
譬如在這裡配置了一些公共配置:

#公共配置檔案所有配置檔案預設繼承
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:9999/eureka/
#關閉服務監控資訊Actuator的安全驗證
management:
  security:
    enabled: false
#feign呼叫開啟Hystrix
feign:
  hystrix:
    enabled: true

這裡有一個服務叫user-service,它的配置檔案就是上圖中的user-service-pro.yml。
在user-service這個工程中的resources目錄下的bootstrap.yml配置檔案就要指定去哪裡讀取它真正的配置檔案:
這裡寫圖片描述
bootstrap.yml

#bootstrap名稱的配置檔案比application名稱的配置檔案有更高的優先順序執行
spring:
  application:
    name: user-service
  cloud:
    config:
      #指定讀取配置檔案服務的地址
      uri: http://localhost:9998
      fail-fast: true
  profiles:
    #需要讀取的配置檔案版本 dev  pro  test
    active: pro

user-service-pro.yml才配置了user-service的配置資訊

server:
  port: 7001

spring:
  #指定zipkin服務地址
  zipkin:
    base-url: http://localhost:8001

#  rabbitmq:
#    host: localhost
#    port: 5672
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://112.74.38.117:3306/springcloud?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&&useSSL=true
    username: root
    password: 123456
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

Spring Cloud Config 可以組合 Spring Cloud Bus 實現配置檔案動態重新整理,參考文件:文件

這裡寫圖片描述