1. 程式人生 > >springcloud入門之配置中心

springcloud入門之配置中心

開發分散式系統如果還是各個服務配置檔案單獨配置肯定是不行的,springcloud使用的解決方案是搭建配置中心將並指定一個配置檔案路徑如git專案對配置檔案進行統一管理。
在Spring Cloud中,提供了分散式配置中心元件spring cloud config ,它支援配置服務放在配置服務的記憶體中(即本地),也支援放在遠端Git倉庫中。在實現cloud config中,主要有兩個角色:作為配置中心連線配置路徑的 config server,連線配置中心讀取配置的config client。

使用springcloud 搭建一個入門的配置中心 config server

基本步驟:
1.新建一個springboot專案,依賴選擇 config server,eureka,web

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

2.程式啟動類Application加上註解@EnableConfigServer註解開啟配置伺服器的功能

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

3.配置檔案application.yml配置服務和配置檔案路徑

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false

server:
  port: 8040
spring:
  application:
    name: microservice-config-server
  cloud:
    config:
      server:
        git:
          uri: https://github.com/eacdy/spring-cloud-study/   # 配置git倉庫的地址
          search-paths: config-repo # git倉庫地址下的相對地址,可以配置多個,用,分割。
          username: # git倉庫的賬號
          password: # git倉庫的密碼

本專案git倉庫為測試倉庫,可直接使用測試
注:配置中心專案除了在匯入eureka依賴並在程式啟動類Application上加上註解@EnableConfigServer表示該專案是配置中心,還需要在配置檔案中配置
eureka:
client:
register-with-eureka: false
fetch-registry: false

避免配置中心向自己釋出服務導致程式報錯服務啟動不了。如果不加專案啟動時報錯:Cannot execute request on any known server

使用springcloud搭建入門配置服務client

基本步驟
1.新建springboot專案,依賴選擇 config,web,actuator

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

        <!-- client需要新增以下依賴,否則訪問/refresh將會得到404 -->
        <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>

注:作為config client需要新增以下依賴,否則訪問/refresh將會得到404
controller需要新增@RefreshScope註解,否則配置無法重新整理

2.配置檔案配置bootstrap.yml(自行建立檔案)

spring:
  application:
    name: microservice-config-client # 對應config-server所獲取的配置檔案的{application}
  cloud:
    config:
      uri: http://localhost:8040/
      profile: dev # 指定profile,對應config-server所獲取的配置檔案中的{profile}
      label: master # 指定git倉庫的分支,對應config-server所獲取的配置檔案的{label}

application.yml配置本地專案啟動載入如服務埠server.port=8041
注:為什麼不直接把配置全部直接寫入application.yml而是另建bootstrap.yml:
因為config部分的配置先於 application.yml 被載入,而 bootstrap.yml 中的配置會先於 application.yml 載入,如果直接寫在application.yml會導致專案啟動時無法讀取到配置中心配置檔案導致報錯。

3.編寫controller類測試配置讀取情況

@RestController
@RefreshScope
public class TestConfigTontroller {
    //這個@Value會根據配置的配置中心地址找到git倉庫對應的配置和本地服務的配置檔案
    @Value("${profile}")
    private String configValue;
    @RequestMapping("testConfig")
    public String test(){
        return "讀取到配置中心:"+configValue;
    }
}

springcloud config 的client實現讀取配置的大體路徑:
config-server從git倉庫讀取到配置檔案,config-client再通過訪問config-server獲取到配置屬性