亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Nacos配置中心搭建及動(dòng)態(tài)刷新配置及踩坑記錄

 更新時(shí)間:2022年11月23日 09:30:51   作者:弱水提滄  
這篇文章主要介紹了Nacos配置中心搭建及動(dòng)態(tài)刷新配置及踩坑記錄,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

近期有用到阿里的開源配置中心及注冊(cè)中心nacos,特此記錄并分享一些學(xué)習(xí)筆記及配置踩坑點(diǎn)。

一、Nacos配置中心介紹

從架構(gòu)圖上可以知道,Nacos提供了兩種服務(wù),一種是用于服務(wù)注冊(cè)、發(fā)現(xiàn)的Naming Service,一種是用于配置中心、動(dòng)態(tài)配置的Config Service,而他們底層均由core模塊來(lái)支持。

外層提供OpenAPI供客戶端使用,并提供了User Console、Admin Console方便用戶使用 。

用戶通過(guò)管理平臺(tái)發(fā)布配置,通過(guò)HTTP調(diào)用將配置注冊(cè)到服務(wù)端,服務(wù)端將之保存在MySQL等持久化存儲(chǔ)引擎中;用戶通過(guò)客戶端SDK訪問(wèn)服務(wù)端的配置,同時(shí)建立HTTP的長(zhǎng)輪詢監(jiān)聽配置項(xiàng)變更,同時(shí)為了減輕服務(wù)端壓力和保證容災(zāi)特性,配置項(xiàng)拉取到客戶端之后會(huì)保存一份快照在本地文件中,SDK優(yōu)先讀取本地文件里的配置。

當(dāng)服務(wù)端的配置發(fā)生變更時(shí),客戶端會(huì)通過(guò)監(jiān)聽機(jī)制,拿到變更后的最新配置信息。

簡(jiǎn)單來(lái)說(shuō),Nacos 客戶端是怎么實(shí)時(shí)獲取到 Nacos 服務(wù)端的最新數(shù)據(jù)的:

Nacos 并不是通過(guò)推的方式將服務(wù)端最新的配置信息發(fā)送給客戶端的,而是客戶端維護(hù)了一個(gè)長(zhǎng)輪詢的任務(wù),定時(shí)去拉取發(fā)生變更的配置信息,然后將最新的數(shù)據(jù)推送給 Listener 的持有者。

二、配置中心搭建

1.配置中心啟用

首先需要到官網(wǎng)上下載nacos-server,然后將服務(wù)跑起來(lái)之后。

根據(jù)自己的需要,建立幾個(gè)命名空間,當(dāng)然使用默認(rèn)的public的命名空間也是可以的,如圖所示。

2.創(chuàng)建配置文件

在配置列表中創(chuàng)建配置文件,其中配置文件命名方式需要注意。

在Nacos-Server中新建配置,其中Data ID它的定義規(guī)則是:${prefix}-${spring.profiles.active}.${file-extension}

  • prefix 默認(rèn)為 spring.application.name 的值,也可以通過(guò)配置項(xiàng) spring.cloud.nacos.config.prefix 來(lái)配置。
  • spring.profiles.active 即為當(dāng)前環(huán)境對(duì)應(yīng)的 profile,可以通過(guò)配置項(xiàng) spring.profiles.active 來(lái)配置。
  • file-exetension 為配置內(nèi)容的數(shù)據(jù)格式,可以通過(guò)配置項(xiàng) spring.cloud.nacos.config.file-extension 來(lái)配置。目前只支持 properties 和 yaml 類型。

注意:當(dāng) spring.profiles.active 為空時(shí),對(duì)應(yīng)的連接符 - 也將不存在,dataId 的拼接格式變成 prefix.{prefix}.prefix.{file-extension}

在本文中,我的項(xiàng)目名稱為vaso-core,配置文件使用的是dev環(huán)境,因此我的配置文件如下:

其中的文件內(nèi)容就是正常的yaml格式的內(nèi)容填寫就行,這邊就不具體展示了。

3.工程配置

首先我們需要導(dǎo)入nacos-config的依賴(注:我這邊沒有使用nacos的注冊(cè)發(fā)現(xiàn),依舊沿用自身使用的eureka)。

其中依賴版本的對(duì)應(yīng)關(guān)系可以在官網(wǎng)中查找。

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.1.2.RELEASE</version>
        </dependency>

其次我們需要在配置文件中進(jìn)行配置,采用bootstrap.yml文件進(jìn)行配置,因?yàn)閟pringboot會(huì)優(yōu)先啟動(dòng)bootstrap.yml文件中的配置。其中文件內(nèi)容如下:

bootstrasp.yml:

spring:
  application:
    name: vaso-core
    cloud:
    nacos:
#      discovery:
#        server-addr: xx.xx.xxx.xx:8848
#        namespace: 8b387ec4-e60d-4878-baf4-f2246e58a1d6
      config:
        server-addr: xx.xx.xxx.xx:8848
        file-extension: yml
        namespace: 8b387ec4-e60d-4878-baf4-f2246e58a1d6
  profiles:
    active: dev

namespace的內(nèi)容為上文中配置的dev命名空間的id。

最后我們需要引入@refreshscope關(guān)鍵字,保證可以實(shí)時(shí)刷新配置。在controller層或者要刷新的值所在的類上進(jìn)行注釋就行。

其中我們的demo是如下所示:

三、試驗(yàn)結(jié)果

將工程跑起來(lái),可以看到一開始就已經(jīng)去配置中心讀取配置了,如圖:

此時(shí)將配置中心內(nèi)容修改,可以看到已經(jīng)實(shí)時(shí)刷新了配置。

四、踩坑經(jīng)歷

其實(shí)在正式使用之前也碰到過(guò)nacos無(wú)法試試實(shí)時(shí)刷新的問(wèn)題,打斷點(diǎn)卻發(fā)現(xiàn)實(shí)際已經(jīng)讀取到本地,通過(guò)進(jìn)入spring的源碼中查看,也發(fā)現(xiàn)其實(shí)已經(jīng)可以拿到配置了,但是卻一直無(wú)法刷新配置。

最后通過(guò)一個(gè)禮拜的定位源碼,斷點(diǎn)查詢才發(fā)現(xiàn)一個(gè)本質(zhì)性的問(wèn)題。欲哭無(wú)淚

@RefreshScope與數(shù)據(jù)源之間存在沖突!!

具體如下:

  • 因?yàn)轫?xiàng)目是多數(shù)據(jù)源,所以使用的是自定義數(shù)據(jù)源配置的DataSource,用@Bean注入。
  • 在SpringBoot 2.0以上默認(rèn)使用Hikari連接池,一旦連接池啟動(dòng),就無(wú)法再修改HikariDataSource,所以刷新配置時(shí)連帶數(shù)據(jù)源一起刷新,于是會(huì)報(bào)錯(cuò)。

Caused by: java.lang.IllegalStateException: The configuration of the pool is sealed once started. Use HikariConfigMXBean for runtime changes.

解決方法: 在自定義的DataSource上加入注解@RefreshScope,或者使用spring.scloud.refresh.extra-refreshable配置指定classname列表即可。

查看Hikari的默認(rèn)配置即可發(fā)現(xiàn),這個(gè)與刷新配置之間是存在沖突的。

因此在數(shù)據(jù)源配置類中加入注釋,這樣每次刷新配置的時(shí)候會(huì)重新刷新這個(gè)Bean,那么就可以保證不會(huì)報(bào)錯(cuò),這樣的spring的刷新機(jī)制就可以順利執(zhí)行下去了。

五、總結(jié)

通過(guò)這次經(jīng)歷,我發(fā)現(xiàn)定位問(wèn)題的過(guò)程是一門極高的學(xué)問(wèn),學(xué)會(huì)怎么去看源碼,懂原理才能更好的更精準(zhǔn)的分析問(wèn)題所在之處。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 教你用springboot連接mysql并實(shí)現(xiàn)增刪改查

    教你用springboot連接mysql并實(shí)現(xiàn)增刪改查

    今天教各位小伙伴用springboot連接mysql并實(shí)現(xiàn)增刪改查功能,文中有非常詳細(xì)的步驟及代碼示例,對(duì)正在學(xué)習(xí)Java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • BiConsumer接口中的方法andThen?accept使用詳解

    BiConsumer接口中的方法andThen?accept使用詳解

    這篇文章主要為大家介紹了BiConsumer接口中的方法andThen?accept使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Spring Boot開發(fā)Web應(yīng)用詳解

    Spring Boot開發(fā)Web應(yīng)用詳解

    這篇文章主要介紹了Spring Boot開發(fā)Web應(yīng)用詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • Java實(shí)現(xiàn)求解一元n次多項(xiàng)式的方法示例

    Java實(shí)現(xiàn)求解一元n次多項(xiàng)式的方法示例

    這篇文章主要介紹了Java實(shí)現(xiàn)求解一元n次多項(xiàng)式的方法,涉及java高斯消元法處理矩陣運(yùn)算解多項(xiàng)式的相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • Java 淺復(fù)制和深復(fù)制的實(shí)例詳解

    Java 淺復(fù)制和深復(fù)制的實(shí)例詳解

    這篇文章主要介紹了Java 淺復(fù)制和深復(fù)制的實(shí)例詳解的相關(guān)資料,這里提供實(shí)例幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下
    2017-08-08
  • Ajax 驗(yàn)證用戶輸入的驗(yàn)證碼是否與隨機(jī)生成的一致

    Ajax 驗(yàn)證用戶輸入的驗(yàn)證碼是否與隨機(jī)生成的一致

    本文主要介紹了后臺(tái)驗(yàn)證用戶輸入的驗(yàn)證碼是否與隨機(jī)生成的驗(yàn)證碼一致的方法,具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • 深入理解equals和hashCode方法

    深入理解equals和hashCode方法

    在Java中,equals和hashCode方法是Object中提供的兩個(gè)方法,這兩個(gè)方法對(duì)以后的學(xué)習(xí)有很大的幫助,本文就深度來(lái)去講解這兩個(gè)方法。下面小編帶大家來(lái)一起學(xué)習(xí)吧
    2019-06-06
  • Java中的紙老虎之泛型

    Java中的紙老虎之泛型

    泛型在java中有很重要的地位,在面向?qū)ο缶幊碳案鞣N設(shè)計(jì)模式中有非常廣泛的應(yīng)用。對(duì)java的泛型特性的了解僅限于表面的淺淺一層,直到在學(xué)習(xí)設(shè)計(jì)模式時(shí)發(fā)現(xiàn)有不了解的用法,才想起詳細(xì)的記錄一下。
    2021-09-09
  • Java的Jackson庫(kù)中復(fù)雜對(duì)象集合的幾種簡(jiǎn)單轉(zhuǎn)換

    Java的Jackson庫(kù)中復(fù)雜對(duì)象集合的幾種簡(jiǎn)單轉(zhuǎn)換

    本文主要介紹了Java的Jackson庫(kù)中復(fù)雜對(duì)象集合的幾種簡(jiǎn)單轉(zhuǎn)換。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • 淺談Java 中的引用類型

    淺談Java 中的引用類型

    Java開發(fā)者肯定都很熟悉java中的4種引用類型,它們從強(qiáng)到弱分別是:強(qiáng)引用、軟引用、弱引用和虛引用,下面我們?cè)敿?xì)看看這些引用類型
    2020-02-02

最新評(píng)論