spring cloud - 配置中心

spring cloud 配置中心

  1. 配置中心的搭建和簡單使用

(1).爲了更貼近生產,我們首先配置Host

127.0.0.1 config-server

(2).準備個配置文件

// 配置文件,命名規範爲項目名稱-環境名稱.properties,本文在git倉庫:https://github.com/eacdy/spring-cloud-study/中,新建目錄config-repo,創建以下幾個文件

microservice-config-client-dev.properties
microservice-config-client.properties

// 其中在:microservice-config-client-dev.properties 文件中添加如下內容:

profile=dev

(3).服務器端代碼示例


//gradle依賴如下

compile "org.springframework.cloud:spring-cloud-config-server:Brixton.SR5"

//maven依賴如下

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
    <version>Brixton.SR5</version>
</dependency>
// 啓動類ConfigServerApplication.java

/**
 * 通過@EnableConfigServer註解激活配置服務.
 * 說明:
 * 在application.yml中有個git.uri的配置,目前配置的是https://github.com/eacdy/spring-cloud-study/
 * 獲取git上的資源信息遵循如下規則:
 * /{application}/{profile}[/{label}]
 * /{application}-{profile}.yml
 * /{label}/{application}-{profile}.yml
 * /{application}-{profile}.properties
 * /{label}/{application}-{profile}.properties
 *
 * 例如本例:可使用以下路徑來訪問microservice-config-client-dev.properties:
 * http://localhost:8040/microservice-config-client-dev.properties
 * http://localhost:8040/microservice-config-client/dev
 * ...
 * @author eacdy
 */
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
  public static void main(String[] args) {
    SpringApplication.run(ConfigServerApplication.class, args);
  }
}
// 配置文件:application.yml

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倉庫的密碼

(4).測試工作


// 獲取git上的資源信息遵循如下規則 
{application}/{profile}[/{label}] 
{application}-{profile}.yml
{label}/{application}-{profile}.yml
{application}-{profile}.properties
{label}/{application}-{profile}.properties

// 例如本例:可使用以下路徑來訪問microservice-config-client-dev.properties:

http://localhost:8040/microservice-config-client-dev.properties http://localhost:8040/microservice-config-client/dev

// 按照上文,我們成功搭建了Config Server,並測試能夠正常獲取到git倉庫中的配置信息。

(5).配置服務客戶端示例


//gradle依賴如下

compile "org.springframework.cloud:spring-cloud-config-server:Brixton.SR5"

//maven依賴如下

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
    <version>Brixton.SR5</version>
</dependency>
// 啓動類ConfigClientApplication.java

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

// 編寫測試Controller

/**
 * 這邊的@RefreshScope註解不能少,否則即使調用/refresh,配置也不會刷新
 * @author eacdy
 */
@RestController
@RefreshScope
public class ConfigClientController {
  @Value("${profile}")
  private String profile;

  @GetMapping("/hello")
  public String hello() {
    return this.profile;
  }
}

// 配置文件:application.yml

server:
  port: 8041

// 配置文件bootstrap.yml(爲什麼要使用bootstrap.yml而不直接放在application.yml中的原因見注意點)

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

// 啓動,並訪問:http://localhost:8041/hello ,我們會發現此時可以顯示git倉庫中配置文件的內容:   dev   

(6).配置內容的熱加載

// 我們將microservice-config-client-dev.properties中值改爲

profile=abcd
// 並提交到git倉庫。

// 然後使用命令(本文使用的是curl,Linux和Windows都有curl工具,當然也可以藉助其他工具,例如Postman等):

curl  -X POST http://localhost:8041/refresh

// 然後再次訪問http://localhost:8041/hello ,將會看到:abcd ,說明配置已經刷新。

(7).注意點

// client需要添加以下依賴,否則訪問/refresh將會得到404:

//gradle依賴如下

compile "org.springframework.cloud:spring-boot-starter-actuator:Brixton.SR5"

//maven依賴如下

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    <version>Brixton.SR5</version>
</dependency>

// client的controller需要添加@RefreshScope註解,否則配置無法刷新。

// 本文的bootstrap.yml文件中的內容不能放到application.yml中,否則config部分無法被加載,因爲config部分的配置先於application.yml被加載,而bootstrap.yml中的配置會先於application.yml加載,

// Config Server也可以支持本地存儲或svn而不使用git,相對較爲簡單,故而本文不作贅述,有興趣的可以自行閱讀Spring Cloud的文檔。

(8).描述來源於:http://book.itmuch.com/2%20Spring%20Cloud/2.5%20%E9%85%8D%E7%BD%AE%E4%B8%AD%E5%BF%83.html

  1. 配置服務與註冊中心聯合使用
// 在生產環境中,我們可能會將Config Server 與 Eureka等註冊中心聯合使用(注意:目前Spring Cloud只支持與Eureka及Consul聯合使用,不支持與Zookeeper聯合使用),下面講解如何將Config Server與 Eureka 聯合使用。

(1).準備工作

// 啓動服務microservice-discovery-eureka ;

// 和上文一樣,準備好幾個配置文件,命名規範爲項目名稱-環境名稱.properties ,本文使用的名稱是microservice-config-client-eureka-dev.properties 。

(2).服務器端代碼示例

//gradle依賴如下

compile "org.springframework.cloud:spring-cloud-config-server:Brixton.SR5"
compile "org.springframework.cloud:spring-cloud-starter-eureka:Brixton.SR5"

//maven依賴如下

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

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
    <version>Brixton.SR5</version>
</dependency>

// 啓動類:ConfigServerEurekaApplication.java

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

// 配置文件:application.yml

erver:
  port: 8050
spring:
  application:
    name: microservice-config-server-eureka
  cloud:
    config:
      server:
        git:
          uri: https://github.com/eacdy/spring-cloud-study/
          search-paths: config-repo
          username: 
          password: 
eureka:
  client:
    serviceUrl:
      defaultZone: http://discovery:8761/eureka/

(3).客戶端示例

//gradle依賴如下

compile "org.springframework.cloud:spring-cloud-config-server:Brixton.SR5"
compile "org.springframework.cloud:spring-cloud-starter-eureka:Brixton.SR5"
compile "org.springframework.cloud:spring-boot-starter-actuator:1.4.0.RELEASE"

//maven依賴如下

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

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
    <version>Brixton.SR5</version>
</dependency>

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    <version>1.4.0.RELEASE</version>
</dependency>
// 啓動類:ConfigClientEurekaApplication.java

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

// 編寫測試Controller

/**
 * 這邊的@RefreshScope註解不能少,否則即使調用/refresh,配置也不會刷新
 * @author eacdy
 */
@RestController
@RefreshScope
public class ConfigClientController {
  @Value("${profile}")
  private String profile;

  @GetMapping("/hello")
  public String hello() {
    return this.profile;
  }
}

// 配置文件:application.yml

server:
  port: 8051

// 配置文件:bootstrap.yml

pring:
  application:
    name: microservice-config-client-eureka
  cloud:
    config:
      profile: dev
      label: master
      discovery:
        enabled: true                                 # 默認false,設爲true表示使用註冊中心中的configserver配置而不自己配置configserver的uri
        serviceId: microservice-config-server-eureka  # 指定config server在服務發現中的serviceId,默認爲:configserver
eureka:
  client:
    serviceUrl:
      defaultZone: http://discovery:8761/eureka/

# 參考文檔:https://github.com/spring-cloud/spring-cloud-config/blob/master/docs/src/main/asciidoc/spring-cloud-config.adoc#discovery-first-bootstrap

// 從示例代碼我們發現,想要將Config Server 與 註冊中心聯合使用,只需要在客戶端側配置spring.cloud.config.discovery.enabled=true 和 spring.cloud.config.discovery.serviceId 兩個配置項即可。Eureka的配置前文有講到過,如有疑問,詳見服務發現的相關章節。

// 注意:當服務發現是Eureka 及 Consul 時,Config Server支持與之聯合使用;如果是Zookeeper 做服務發現,目前不支持與之聯合使用。

(4).描述來源於:http://book.itmuch.com/2%20Spring%20Cloud/2.5%20%E9%85%8D%E7%BD%AE%E4%B8%AD%E5%BF%83.html

發佈了68 篇原創文章 · 獲贊 119 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章