天天看點

Spring Cloud 如何動态重新整理 Git 倉庫配置?

本文基于以下講解:

  • Spring Cloud Greenwich.SR3
  • Spring Boot 2.1.7.RELEASE
  • 基于 Git 的配置中心倉庫

添加 actuator 依賴

在引用配置中心的項目中添加以下

actuator

依賴:

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

spring-boot-starter-actuator:這個子產品的 /actuator/refresh (POST請求)端點可以重新整理配置,更多的使用參考 Spring Boot 系列文章。

暴露 refresh 端點

actuator 預設是不暴露 refresh 端點的,需要我們主動暴露,在引用配置中心的項目中添加以下配置:

management:
  endpoints:
    web:
      exposure:
        include: refresh,info,health
      

添加重新整理範圍

引用了配置中心的項目,在需要重新整理的

Bean

上添加

@RefreshScope

注解。

示例1:

@RefreshScope
@RestController
public class TestController {

    @Value("${username}")
    private String username;
    
...

}
      
@RefreshScope
@ConfigurationProperties(prefix = "spring.mail")
public class MailProperties {

...

}
      

當配置更改時,标有 @RefreshScope 的 Bean 将得到特殊處理來生效配置,不然改了配置不會重新整理的。@RefreshScope 的原理可以參考這篇文章:Spring Cloud @RefreshScope 原理是什麼?,很詳細。

手動重新整理配置

修改配置後,我們可以通過 post 到 /actuator/refresh 即可手動重新整理配置。

如下圖所示:

Spring Cloud 如何動态重新整理 Git 倉庫配置?

如果參數有變更,重新整理成功的話,會傳回一個含有參數名的變更數組。

自動重新整理配置

如果你使用了 Gitlab 或者 Github 倉庫,可以配置

Webhooks

來做到自動更新,當參數變更時,能做到自動通知。

Gitlab配置如下圖所示:

Spring Cloud 如何動态重新整理 Git 倉庫配置?

Github也差不多的,可以配置一個 URL(用于變更通知)和一個 Secret Token(用于請求驗證)。

但這種方式僅限于單台,如果有多台或者多個系統,該如何通知,恐怕需要加一個公共接口來繞一圈了。

如果需要請求頭認證的,可以使用這種方式:

https://user:password@ip:port/xxxx

擴充問題

如果使用配置中心項目少的情況,我們是可以通過上面的方式進行配置動态重新整理,如果項目比較複雜的情況呢?

上面的方式肯定都是行不通的,Spring Cloud Bus 消息總線可以解決配置修改的真正的動态重新整理,請看下回分解。關注微信公衆号:Java技術棧,第一時間推送。在公衆号背景回複:cloud,還能擷取棧長整理的 Spring Cloud 系列教程,都是實戰幹貨。