1. 程式人生 > >Java SpringCloud系列(二) —— config(配置中心)簡介以及搭建

Java SpringCloud系列(二) —— config(配置中心)簡介以及搭建

首先,整個課程系列需要同學們有一定的基礎技能,分別是java、springboot、github以及基礎的Linux的知識,其中springboot是各位同學一定要掌握的,如果沒有springboot基礎可以檢視我之前的部落格對 java 搭建基於springboot的ssm(spring + springmvc + mybatis)的maven專案java 搭建基於springboot的ssh(spring + springmvc + hibernate)的gradle專案(基礎篇) 進行學習,關於github以及Linux方面可以在使用到的時候再進行學習以及準備。
現在我們開始進入springcloud系列第二篇,關於config(配置中心的簡介以及搭建)。

1.config(配置中心)簡介

Spring Cloud Config 是用來為分散式系統中的基礎設定和微服務應用提供集中化的外部配置支援,它是一個獨立的微服務應用,直白的將,就是你可以將你的專案的資料庫等配置抽取到一個外部(github、gitlab、svn等)並進行讀取和使用,並支援在不重啟專案的情況下讀取到的配置檔案可實時更新(配合spring cloud bus,後面文章我們會進行講解)。

2.使用原因

在我們使用任何一個功能或者在我們做任何一件事之前,一定要知道使用它的原因以及它能帶來的好處。
1.為什麼我們要使用config?

1.我們希望使用config提供的配置檔案抽取到外部進行讀取的功能
2.我們希望達到在不重啟專案的基礎上將能達到配置檔案內容會我修改後自動更新。

2.為什麼我想要上面兩個功能?

功能一:在微服務架構中,我們的每一個服務一定會進行多套的負載,以資料庫配置舉例來說,如果我的服務A做了100套負載A1,A2…A99,A100,這時候我需要在每一個服務中寫100次資料庫配置,這個時候如果我的資料庫變了,我居然要改100個服務的配置檔案!想一想這是不是一個巨大的工作量,但是如果我將配置統一抽取到一個外部(例如:github的某一個倉庫中),我的每一個A負載服務想要調取資料庫配置時,只要去遠端倉庫區對應的資料即可,並且在我想要修改資料庫的時候,我只要將github倉庫中的一條資料庫配置進行修改,就會進行一概全改。有的同學會說,真正開發的時候怎麼會改生產環境的資料庫地址,這裡我只是舉一個例子,那如果只是一個抽取到配置檔案的變數呢?例如驗證碼失效時間或者token失效時間等這些有可能變動的值呢?所以這個功能還是很有必要的。
功能二:在我修改了外部的配置檔案後,我不可能把我的100個服務只因為一個變數的修改就全部重啟吧,這工作量確實有點大。所以這時候我會使用spring cloud bus(訊息匯流排)來實現不重啟服務來拿去最新的配置檔案內容,關於訊息匯流排的實現我會在後面的文章中進行詳細的配置講解,我們這篇文章還是以config的搭建為主。

3.config搭建

上面已經說明了為什麼我們要使用config將配置檔案進行外部抽取,首先說明一下,在微服務架構體系中,config不是必備的,但是我個人認為在實際的開發和生產環境中,config是一個十分必要的功能。好了,我們開始搭建。

3.1 環境準備

開發工具:idea
開發環境:JDK8
spring boot 版本: 2.0.3
構建工具: gradle4.5(因為springboot使用2.0所以gradle要使用4.0以上版本)

3.2 服務端

1.建立springboot專案
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
2.改造為config配置中心
這裡寫圖片描述
這裡寫圖片描述

#服務名稱
spring.application.name=config
#git地址(具體其中目錄結構同學們自己根據url去看,這裡就不截圖了)
spring.cloud.config.server.git.uri=https://github.com/beyondLi71/csdn-config-demo.git
#賬號密碼
spring.cloud.config.server.git.username=beyondLi71
spring.cloud.config.server.git.password=你的密碼
#對應的資料夾下(看需求使用)
#spring.cloud.config.server.git.search-paths=dev
#指定配置檔案縮放位置(生產使用)
#spring.cloud.config.server.git.basedir=
#eureka註冊地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

我們先啟動我們的eureka,之後再啟動我們的config,訪問我們的eureka檢視config是否被註冊。如下圖所示表示配置中心註冊成功

這裡寫圖片描述
3.通過url獲取配置中心配置內容

首先我們先科普幾個概念
name:服務名
profiles:環境
label:分支
好了,科普完以上的名詞,我們的訪問url規則如下
/{name}-{profiles}.properties

/{label}/{name}-{profiles}.properties
現在我們訪問一下url,如下圖所示。

這裡寫圖片描述

細心的同學會發現,其實我們的develop分支的csdn-dev檔案中根本沒有name這個配置,那為什麼還會能取到name呢?這裡是因為config會預設將不帶環境的檔案作為一個基礎資料,無論哪個環境都會拿到這些基礎資料。

3.3 客戶端

1.準備服務以及github地址

2.改造config

我們要支援多個服務拿不同配置檔案,肯定要將config進行改造,我們需要將配置檔案改為如下
這裡寫圖片描述

#服務名稱
spring.application.name=config
#git地址
spring.cloud.config.server.git.uri=https://github.com/beyondLi71/{application}-conf.git
#賬號密碼
spring.cloud.config.server.git.username=beyondLi71
spring.cloud.config.server.git.password=你的密碼
#對應的資料夾下(看需求使用)
#spring.cloud.config.server.git.search-paths=dev
#指定配置檔案縮放位置(生產使用)
#spring.cloud.config.server.git.basedir=
#eureka註冊地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

3.建立客戶端專案

選擇依賴包如下,其餘建立過程與上面相同

這裡寫圖片描述

建立目錄結構如下
這裡寫圖片描述

4.改造為讀取config的客戶端
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

#服務名稱(需要與config中的{application}位置正好拼成相應的git地址)
spring.application.name=csdn-client-one
#註冊中心
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
#config配置中心
#開啟通過服務來訪問ConfigServer功能
spring.cloud.config.discovery.enabled=true
#配置要連線的註冊中心名稱
spring.cloud.config.discovery.service-id=config
#設定訪問分支(預設master)
#spring.cloud.config.label=develop

結果如下圖所示,當我不設定label時,配置檔案是從master分支讀取,所以我啟動時的埠是8081,當設定label時,讀取的是develop分支。

這裡寫圖片描述
這裡寫圖片描述

好了,client-two的就不給各位同學一一截圖了,和上面一樣,大概的config搭建、使用情況以及語法就是這樣,在真正的開發以及生產環境中可以各種組合去控制不同分支和環境的配置檔案,沒有一個具體的標準,到時候就看各位同學自由發揮了。