<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          使用 Spring Cloud Config 統(tǒng)一管理配置,別再到處放配置文件了!

          共 8568字,需瀏覽 18分鐘

           ·

          2022-07-13 07:01

          大家好,我是寶哥!

          1 簡述

          官方文檔對Spring Cloud Config的描述如下:

          Spring Cloud Config為分布式系統(tǒng)中的外部配置提供服務(wù)器和客戶端支持,使用Config Server,您可以在所有環(huán)境中管理應(yīng)用程序的外部屬性??蛻舳撕头?wù)器上的概念映射與Spring EnvironmentPropertySource抽象相同。

          因此它們與Spring應(yīng)用程序非常契合,但可以與任何以任何語言運行的應(yīng)用程序一起使用。隨著應(yīng)用程序通過從開發(fā)人員到測試和生產(chǎn)的部署流程,您可以管理這些環(huán)境之間的配置,并確定應(yīng)用程序具有遷移時需要運行的一切。

          服務(wù)器存儲后端的默認實現(xiàn)使用git,因此它輕松支持標簽版本的配置環(huán)境,以及可以訪問用于管理內(nèi)容的各種工具。很容易添加替代實現(xiàn),并使用Spring配置將其插入。

          1.1 配置中心存在的意義

          一個應(yīng)用中不只是代碼,還需要連接資源和其它應(yīng)用,經(jīng)常有很多需要外部設(shè)置的項去調(diào)整應(yīng)用行為,如切換不同的數(shù)據(jù)庫,設(shè)置功能開關(guān)等。

          隨著系統(tǒng)微服務(wù)的不斷增加,首要考慮的是系統(tǒng)的可伸縮、可擴展性好,隨之就是一個配置管理的問題。各自管各自的開發(fā)時沒什么問題,到了線上之后管理就會很頭疼,到了要大規(guī)模更新就更煩了。

          而且你不可能停止你的服務(wù)集群去更新的你配置,這是不現(xiàn)實的做法,因此Spring Cloud配置中心就是一個比較好的解決方案,下圖就是一個Spring Cloud配置中心的解決方案:

          架構(gòu)圖如下:

          常見的配置中心的實現(xiàn)方法有:

          • 硬編碼(缺點:需要修改代碼,風險大)
          • 放在xml等配置文件中,和應(yīng)用一起打包(缺點:需要重新打包和重啟)
          • 文件系統(tǒng)中(缺點:依賴操作系統(tǒng)等)
          • 環(huán)境變量(缺點:有大量的配置需要人工設(shè)置到環(huán)境變量中,不便于管理且依賴平臺)
          • 云端存儲(缺點:與其他應(yīng)用耦合)

          Spring Cloud Config就是云端存儲配置信息的,它具有中心化、版本控制、支持動態(tài)更新、平臺獨立、語言獨立等特性。其特點是:

          • 提供服務(wù)端和客戶端支持(spring cloud config serverspring cloud config client
          • 集中式管理分布式環(huán)境下的應(yīng)用配置
          • 基于Spring環(huán)境,無縫與Spring應(yīng)用集成
          • 可用于任何語言開發(fā)的程序
          • 默認實現(xiàn)基于git倉庫,可以進行版本管理
          • 可替換自定義實現(xiàn)
          1.1.1 Spring Cloud Config包括兩部分

          1、Spring Cloud Config Server作為配置中心的服務(wù)端:

          • 拉取配置時更新git倉庫副本,保證是最新結(jié)果
          • 支持數(shù)據(jù)結(jié)構(gòu)豐富,yml、json、properties
          • 配合 eureke 可實現(xiàn)服務(wù)發(fā)現(xiàn),配合 cloud bus 可實現(xiàn)配置推送更新
          • 配置存儲基于 git倉庫,可進行版本管理
          • 簡單可靠,有豐富的配套方案

          2、Spring Cloud Config Client客戶端:

          Spring Boot項目不需要改動任何代碼,加入一個啟動配置文件指明使用ConfigServer上哪個配置文件即可

          1.1.2 SpringCloud Config與百度的disconf之類注冊中心區(qū)別

          主要區(qū)別在于下面三點:

          1、配置的存儲方式不同: disconf是把配置信息保存在mysql、zookeeper中,而spring cloud config是將配置保存在git/svn上 (即:配置當成源代碼一樣管理)

          2、配置的管理方式不同: spring cloud config沒有類似disconf的統(tǒng)一管理界面,既然把配置都當成git之類的源碼來看待了,git的管理界面,就是配置的管理界面

          3、配置變化的通知機制不同: disconf中配置變化后,依賴zk的事件watcher來通知應(yīng)用,而spring cloud config則是依賴git每次push后,觸發(fā)webhook回調(diào),最終觸發(fā)spring cloud bus(消息總線),然后由消息總線通知相關(guān)的應(yīng)用。

          從配置變化的通知機制上看,如果有100個應(yīng)用節(jié)點,都依賴于統(tǒng)一配置,如果修改了配置,只想讓某幾個節(jié)點"灰度"更新配置,spring cloud config server更容易做到,這一點相對disconf更靈活

          1.2 代碼示例

          目前SpringCloud Config的使用主要是通過Git/SVN方式做一個配置中心,然后每個服務(wù)從其中獲取自身配置所需的參數(shù)。SpringCloud Config也支持本地參數(shù)配置的獲取。

          如果使用本地存儲的方式,在application.propertiesapplication.yml 文件添加 spring.profiles.active=native 配置即可,它會從項目的 resources路徑下讀取配置文件。如果是讀取指定的配置文件,那么可以使用 spring.cloud.config.server.native.searchLocations = file:D:/properties/來讀取。

          1.2.1 服務(wù)端

          首先是服務(wù)端這塊,首先創(chuàng)建一個注冊中心,為了進行區(qū)分,創(chuàng)建一個springcloud-config-eureka的項目。

          application.properties配置信息:

          配置信息:

          spring.application.name=springcloud-hystrix-eureka-server
          server.port=8005
          eureka.client.register-with-eureka=false
          eureka.client.fetch-registry=false
          eureka.client.serviceUrl.defaultZone=http://localhost:8005/eureka/

          配置說明:

          • spring.application.name: 這個是指定服務(wù)名稱
          • server.port: 服務(wù)指定的端口
          • eureka.client.register-with-eureka: 表示是否將自己注冊到Eureka Server,默認是true
          • eureka.client.fetch-registry: 表示是否從Eureka Server獲取注冊信息,默認為true
          • eureka.client.serviceUrl.defaultZone: 這個是設(shè)置與Eureka Server交互的地址,客戶端的查詢服務(wù)和注冊服務(wù)都需要依賴這個地址

          服務(wù)端這邊只需要在SpringBoot啟動類添加@EnableEurekaServer注解就可以了,該注解表示此服務(wù)是一個服務(wù)注冊中心服務(wù)。

          代碼示例:

          @SpringBootApplication
          @EnableEurekaServer
          public class ConfigEurekaApplication {

           public static void main(String[] args) {
            SpringApplication.run(ConfigEurekaApplication.classargs);
             System.out.println("config 注冊中心服務(wù)啟動...");
           }
          }

          創(chuàng)建好了注冊中心之后,我們再來創(chuàng)建一個配置中心,用于管理配置。

          創(chuàng)建一個springcloud-config-server的項目。然后在application.properties配置文件添加如下配置:

          配置信息:

          spring.application.name=springcloud-config-server
          server.port=9005
          eureka.client.serviceUrl.defaultZone=http://localhost:8005/eureka/
          spring.cloud.config.server.git.uri = https://github.com/xuwujing/springcloud-study/
          spring.cloud.config.server.git.search-paths = /springcloud-config/config-repo
          spring.cloud.config.server.git.username = 
          spring.cloud.config.server.git.password = 

          配置說明:

          • spring.application.name: 這個是指定服務(wù)名稱
          • server.port:服務(wù)指定的端口
          • eureka.client.serviceUrl.defaultZone: 這個是設(shè)置與Eureka Server交互的地址,客戶端的查詢服務(wù)和注冊服務(wù)都需要依賴這個地址
          • spring.cloud.config.server.git.uri: 配置的Git倉庫的地址
          • spring.cloud.config.server.git.search-paths: git倉庫地址下的相對地址 多個用逗號","分割
          • spring.cloud.config.server.git.username: git倉庫的賬號
          • spring.cloud.config.server.git.password: git倉庫的密碼

          注:如果想使用本地方式讀取配置信息,那么只需將spring.cloud.config.server.git的配置改成spring.profiles.active=native,然后在resources路徑下新增一個文件即可。

          這里為了進行本地配置文件測試,新建一個configtest.properties配置文件,添加如下內(nèi)容:

          word=hello world

          代碼這塊也很簡單,在程序主類中,額外添加@EnableConfigServer注解,該注解表示啟用config配置中心功能。代碼如下:

          @EnableDiscoveryClient
          @EnableConfigServer
          @SpringBootApplication
          public class ConfigServerApplication {

           public static void main(String[] args) {
            SpringApplication.run(ConfigServerApplication.classargs);
            System.out.println("配置中心服務(wù)端啟動成功!");
           }
          }

          完成上述代碼之后,我們的配置中心服務(wù)端已經(jīng)構(gòu)建完成了。

          1.2.2 客戶端

          我們新建一個springcloud-config-client的項目,用于做讀取配置中心的配置。pom依賴還是和配置中心一樣,不過需要新增一個配置,用于指定配置的讀取。

          創(chuàng)建一個bootstrap.properties文件,并添加如下信息:

          配置信息:

          spring.cloud.config.name=configtest
          spring.cloud.config.profile=pro
          spring.cloud.config.label=master
          spring.cloud.config.discovery.enabled=true
          spring.cloud.config.discovery.serviceId=springcloud-config-server
          eureka.client.serviceUrl.defaultZone=http://localhost:8005/eureka/

          配置說明:

          • spring.cloud.config.name: 獲取配置文件的名稱
          • spring.cloud.config.profile: 獲取配置的策略
          • spring.cloud.config.label: 獲取配置文件的分支,默認是master。如果是是本地獲取的話,則無用
          • spring.cloud.config.discovery.enabled: 開啟配置信息發(fā)現(xiàn)
          • spring.cloud.config.discovery.serviceId: 指定配置中心的service-id,便于擴展為高可用配置集群
          • eureka.client.serviceUrl.defaultZone: 這個是設(shè)置與Eureka Server交互的地址,客戶端的查詢服務(wù)和注冊服務(wù)都需要依賴這個地址

          注:上面這些與spring-cloud相關(guān)的屬性必須配置在bootstrap.properties中,config部分內(nèi)容才能被正確加載。因為bootstrap.properties的相關(guān)配置會先于application.properties,而bootstrap.properties的加載也是先于application.properties。需要注意的是eureka.client.serviceUrl.defaultZone要配置在bootstrap.properties,不然客戶端是無法獲取配置中心參數(shù)的,會啟動失??!

          application.properties配置

          spring.application.name=springcloud-config-client
          server.port=9006

          配置說明:

          spring.application.name: 這個是指定服務(wù)名稱
          server.port:服務(wù)指定的端口

          程序主類代碼,和之前的基本一致。代碼如下:

          代碼示例:

          @EnableDiscoveryClient
          @SpringBootApplication
          public class ConfigClientApplication {

           public static void main(String[] args) {
            SpringApplication.run(ConfigClientApplication.classargs);
            System.out.println("配置中心客戶端啟動成功!");
           }
          }

          為了方便查詢,在控制中進行參數(shù)的獲取,并返回。@Value注解是默認是從application.properties配置文件獲取參數(shù),但是這里我們在客戶端并沒有進行配置,該配置在配置中心服務(wù)端,我們只需指定好了配置文件之后即可進行使用。

          代碼示例:

          @RestController
          public class ClientController {
           
           @Value("${word}")
           private String word;
           
              @RequestMapping("/hello")
              public String index(@RequestParam String name) {
                  return name+","+this.word;
              }
          }

          到此,客戶端項目也就構(gòu)建完成了。

          1.2.3 功能測試

          完成如上的工程開發(fā)之后,我們來進行測試。

          1.2.3.1 本地測試

          首先我們把springcloud-config-server項目的application.properties配置文件添加spring.profiles.active=native配置,注釋掉spring.cloud.config.server.git相關(guān)的配置,然后在src/main/resources目錄下新建一個configtest.properties文件,然后在里面添加一個配置word=hello world。

          添加完成之后,我們依次啟動springcloud-config-eurekaspringcloud-config-server、springcloud-config-client這三個項目。啟動成功之前,先看來看看配置中心服務(wù)端的配置文件獲取,在瀏覽器輸入:

          http://localhost:9005/configtest-1.properties

          查看該文件的配置信息。

          注:配置文件的名稱是configtest.properties,但是如果直接該名稱的話是獲取不到的,因為在配置文件名需要通過-來進行獲取,如果配置文件名稱沒有-,那么添加了-之后,會自動進行匹配搜索。

          springcloud config的URL與配置文件的映射關(guān)系如下:

          /{application}/{profile}[/{label}]
          /{application}-{profile}.yml
          /{label}/{application}-{profile}.yml
          /{application}-{profile}.properties
          /{label}/{application}-{profile}.properties

          上面的url會映射{application}-{profile}.properties對應(yīng)的配置文件,{label}對應(yīng)git上不同的分支,默認為master。

          界面返回:

          word: hello world

          然后調(diào)用客戶端的接口,查看是否能夠獲取配置信息。在瀏覽器上輸入:

          http://localhost:9006//hello?name=pancm

          界面返回:

          pancm,hello world

          示例圖:

          1.2.3.2 Git測試

          在完成本地測試之后,我們把這個spring.profiles.active=native配置注釋掉,解除spring.cloud.config.server.git相關(guān)的注釋(賬號和密碼要填寫真實的),然后在git倉庫上建立一個config-repo文件夾,新建configtest-pro.properties、configtest-dev.properties兩個配置,這兩個的配置分別是word=hello world??!word=hello world!, 然后和configtest.properties配置文件一起上傳到config-repo文件夾中。

          首先在瀏覽器輸入:

          http://localhost:9005/configtest-dev.properties

          瀏覽器返回:

          word: hello world!

          然后再瀏覽器輸入:

          http://localhost:9005/configtest-pro.properties

          瀏覽器返回:

          word: hello world!!

          上傳了configtest.properties文件,但是這個文件名稱沒有-,我們想獲取其中參數(shù)的信息的話,可以在然后-隨意添加一個參數(shù),它會自動進行匹配,在瀏覽器輸入:

          http://localhost:9005/configtest-1.properties

          瀏覽器返回:

          word: hello world

          然后進行客戶端接口調(diào)用測試,在瀏覽器輸入:

          http://localhost:9006/hello?name=pancm

          瀏覽器返回:

          pancm,Hello World!!

          由于這里我配置的前綴是 pro ,所以讀取的是configtest-pro.properties文件的數(shù)據(jù),想要獲取其他的配置,修改spring.cloud.config.profile配置即可。

          示例圖:

          來源:blog.csdn.net/weixin_42039228/article

          /details/123786902

          精彩推薦:

          京東一面:Redis 如何實現(xiàn)庫存扣減操作?如何防止商品被超賣?

          SpringBoot 三大開發(fā)工具,你都用過么?

          CTO 說了,用錯@Autowired 和@Resource 的人可以領(lǐng)盒飯了

          快速搭建一個網(wǎng)關(guān)服務(wù),動態(tài)路由、鑒權(quán)的流程,看完秒會(含流程圖)

          Nginx 面試 40 連問,快頂不住了~~

          徹底搞懂 SpringBoot jar 可執(zhí)行原理


          瀏覽 56
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产无码在线影院 | 成人做爰69片免费观看 | 无码专区在线播放 | 福利第一页 | AV12在线|