Springcloud結合zookeeper配置中心

Springcloud結合zk實現動態配置

SpringCloud結合git配置不足:需要一個應用作爲服務端,並且沒有自動監聽配置的更改功能。於是我們就藉助zk來幫我們完成這個通知。

  • 安裝zk
    首先我們需要一個zk集羣。下載地址 我們的項目需要配置ssh能夠直接訪問集羣,測試就直接在本地進行。

  • 安裝zkui
    因爲配置文件統一在zk上管理。所以安裝個zkui方便修改(安裝方式如下)。登錄端口默認 9090。http://localhost:9090

git clone https://github.com/DeemOpen/zkui.git
cd zkui/
# 根據自身集羣修改config.cfg 下面zkServer,userSet(登錄賬戶)
mvn clean install
cp config.cfg target
# 啓動
java -jar target/zkui-2.0-SNAPSHOT-jar-with-dependencies.jar
  • pom 配置
<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- 提供zookeeper整合的包 -->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-zookeeper-config</artifactId>
    </dependency>
    <!-- 提供自動監聽的 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
  • 定製屬性配置
    SpringCloud官方文檔 ,搜索 Distributed Configuration with Zookeeper,下面有寫着bootstrap.yml/bootstrap.properties配置,因爲springboot加載文件順序,zookeeper相關配置需要放到這個文件,而不能放到application.properties中。建議配置參照官網教程(不然人家寫的東西可能忽略某些細節)下面是我的bootstrap.properties
spring.application.name=didispace
#根據自身環境
spring.profiles.active=dev
#指定zookeeper的地址,多個用逗號拼接
spring.cloud.zookeeper.connect-string=localhost:2181
#指定springcloud 讀取zookeeper路徑的開始位置。選取你自己的目錄
spring.cloud.zookeeper.config.root=/config
#開始zk的配置
spring.cloud.zookeeper.config.enabled=true
#是否監聽配置
spring.cloud.zookeeper.config.watcher.enabled=true
#配置文件分隔符
spring.cloud.zookeeper.config.profile-separator=-

server.port=7001
  • 測試類
@SpringBootApplication
@RefreshScope
@RestController
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }

    @Value("${from}")
    private String from;

    @RequestMapping("/from")
    //動態修改配置文件的值。
    public String from() {
        return this.from;
    }
}

讀取配置路徑:
/{root}/{application-name}-{profile}
/{root}/{application-name}
根據我們這裏的{root} 爲 config,profile分隔符取你們自定義的,默認爲‘,’。{profile}的話我這裏是dev。

  • 寫入配置到zk
    方式一:通過手動添加Node(目錄)和屬性。我這裏根據之前properties配置創建也config目錄。再創建didispace-dev,然後添加一個Property,key=from。value=test
    zkui
    方式二:點擊Import導入文件。txt格式:/{root}/{application-name}-{profile}={key}={value}。所以對於我的配置txt:/config/didispace-dev=from=test

  • 測試
    配置完成後就剩下測試了。如果能正常啓動,並且有 State change: CONNECTED的日誌就是鏈接zk成功了。然後我們修改配置from的值爲dev,打開REST Client或者Postman等測試工具發一個 localhost:7001/from 請求,如果請求返回dev那就完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章