精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Nacos 中配置 Map 類型,不香!

開發 前端
Nacos API 提供了監聽功能,可以監聽配置的變化,對變化進行處理,只要在監聽方法上增加 @NacosConfigListener 這個注解就可以生效。

大家好,我是君哥。

最近在使用 Nacos 過程中遇到一個場景,配置的字符串可以解析成 Map 類型使用,有一個配置如下:

map:
test: key1:value1,key2:value2,key3:value3

后來有同事建議 Nacos 可以直接配置成 Map 類型,后臺使用 Java Map 類型獲取就可以。配置如下:

map:
test:
key1: value1
key2: value2
key3: value3

下面就來分享一下配置 Map 類型的過程中遇到的問題。

1.使用 Bean 方式獲取配置

1.1 使用方式

參考網上的一些案例,第一個方式是把讀取到的 Map 作為一個 Spring 的 Bean,一看代碼就明白了。

@Bean
@ConfigurationProperties(prefix = "map.test")
public Map<String, String> mapping() {
return new HashMap<>();
}

1.2 槽點

這樣確實可以把 Nacos 中讀取到的配置轉換成 Map 類型,但一個致命的槽點就是 mapping 這個 bean 不能自動刷新。這樣如果修改了 Nacos 中配置,要想讓配置生效,就必須重啟應用服務,這怎么能接受呢?

2.ConfigurationProperties

2.1 使用方式

直接使用 @Value 和 @NacosValue 是獲取不到值的。下面的這種方式,類的定義上加注解 @ConfigurationProperties,再定義一個變量,名稱跟 Nacos 中配置的后綴一樣,這樣是可以獲取到 Map 類型的配置的。

@Component
@RefreshScope
@ConfigurationProperties(prefix = "map")
public class NacosRefresh {

private Logger logger = LoggerFactory.getLogger(getClass());

public void setTest(Map<String, String> test) {
this.test = test;
}

private Map<String, String> test;
}

注意:上面的 setTest 方法是必須要的,不然 test 變量取不到值。

2.2 槽點

這樣確實可以把 Nacos 中讀取到的配置轉換成 Map 類型,但是跟第一種方式一樣,定義的 Map 類型變量不能自動刷新。

3.使用監聽

Nacos API 提供了監聽功能,可以監聽配置的變化,對變化進行處理,只要在監聽方法上增加 @NacosConfigListener 這個注解就可以生效。見下面代碼:

@Service
public class NacosListener {

private Logger logger = LoggerFactory.getLogger(getClass());

private Map<String, String> map = new HashMap<>();

@NacosConfigListener(dataId = "maptest.yaml",groupId = "DEFAULT_GROUP")
public void listener(String context){
logger.info("================listener context:{}", context);
if (StringUtils.isBlank(context)){
return;
}
Yaml yaml = new Yaml();
Map<String, Object> contextMap = yaml.load(context);
Map<String, Object> map = (Map<String, Object>)contextMap.get("map");
if (CollectionUtils.isEmpty(map)){
return;
}
Map<String, String> test = (Map<String, String>) map.get("test");
if (CollectionUtils.isEmpty(test)){
return;
}
map.clear();
map.putAll(test);
map.forEach((k,v) -> logger.info("Entry in map, key:{},value:{}", k, v));
}
}

這段代碼是從 Nacos 配置中解析出 Map 類型的配置,然后把配置 put 到本地變量 map。這個也可以完成我們的需求,但是有幾點需要注意。

3.1 服務重啟

如果服務重啟了,本地變量 map 拉不到值。因為上面監聽的邏輯并沒有走,即使在 Nacos 上重新發布一下,也不行。

上面的監聽方法,只有在 Nacos 配置發生變化并且發布后才會觸發,比如 map.test 配置改變如下:

map:
test:
key1: value1
key2: value2
key3: value3
key4: value4

3.2 并發問題

上面監聽的代碼里面,需要把本地變量 map 先 clear 然后再 putAll,如果這兩個方法調用中間發生了線程上下文切換,讀取線程可能會因為從 map 中取不到值而發生異常。

4.改進

上面講解了使用 Nacos 配置 Map 類型的坑,不過使用 Nacos 配置 Map 類型也有個好處,不用解析字符串,直接可以轉成 Map 類型。

4.1 使用字符串

完全不使用 Map 類型了,改成配置字符串,配置如下:

map:
test: key1:value1,key2:value2,key3:value3

解析代碼如下:

@NacosValue(value = "${map.test}", autoRefreshed = true)
private String mapTest;

public String get(String key){
String[] keys = mapTest.split(",");
for (String item : keys){
if (!item.contains(key)){
continue;
}
return item.split(":")[1];
}
return null;
}

這種寫法的好處是不用監聽 Nacos,配置改變后 mapTest 變量自動刷新,缺點是每次調用 get 方法都需要解析 mapTest 這個字符串。

4.2 刷新本地 Map

把解析字符串的結果放到本地變量 map 上,考慮到 Nacos 中配置可能會發生變化,用定時線程池每 1 秒刷新一次,代碼如下:

private Map<String, String> map = new HashMap<>();

@NacosValue(value = "${map.test}", autoRefreshed = true)
private String mapTest;

@PostConstruct
public void refreshLocalMap(){
ScheduledThreadPoolExecutor scheduled = new ScheduledThreadPoolExecutor(1);
scheduled.scheduleAtFixedRate(() -> refresh(), 0, 1000, TimeUnit.MILLISECONDS);
}

public void refresh(){
String[] keys = mapTest.split(",");
for (String item : keys){
String[] kv = item.split(":");
map.put(kv[0], kv[1]);
}
}

這個寫法的好處是不用每次調用都解析字符串,而是由異步線程每秒鐘刷新。但是也有兩個問題:

  • 需要一個定時線程池,會消耗 CPU 資源。
  • refresh 方法是每秒執行一次,會有短暫的本地變量和 Nacos 配置不一致的問題。

5.總結

Nacos 中配置 Map 類型確實不香,主要原因是刷新不方便。但是對于配置不需要刷新的場景,還是很有好處的,尤其是 key 比較多的時候,比解析字符串方便很多,而且 Hash 的時間復雜度是 o(1) ,在數據結構中是最優秀的。

對于需要刷新的場景,無論使用哪種方案,都有優缺點,沒有最好的,只有最適合的,要根據系統的業務場景來做選擇。

責任編輯:武曉燕 來源: 君哥聊技術
相關推薦

2020-05-25 10:37:58

自學編程技巧

2021-01-11 08:03:30

阿里中臺項目

2021-12-17 15:05:55

CSSwhenelse

2020-10-12 09:48:55

SSR JSPPHP

2020-09-25 15:50:41

鴻蒙小米國產

2021-12-05 23:17:18

iOS蘋果系統

2020-10-21 09:19:27

Flutter開源項目

2020-01-21 21:15:16

WiFi網絡WiFi6

2021-04-06 10:48:52

MySQLElasticsear數據庫

2025-06-25 09:31:41

2021-12-02 06:34:34

GraylogELK日志

2021-12-03 10:46:49

ELKGraylog運維

2021-07-08 06:52:41

ESClickHouse Lucene

2021-06-27 17:33:51

培訓員工AI人工智能

2020-04-28 10:17:51

人工智能技術智能音箱

2021-05-19 09:37:45

SessionTokencookie

2020-07-03 15:10:35

Java Rust 開發

2021-11-29 06:24:05

物聯網平臺物聯網IOT

2021-11-02 16:44:40

部署DevtoolsJRebel

2020-07-30 09:10:21

DockerK8s容器
點贊
收藏

51CTO技術棧公眾號

姬川优奈av一区二区在线电影| 亚洲第一色视频| 四虎国产精品免费观看| 日韩一区二区影院| 看av免费毛片手机播放 | 亚洲国产中文字幕久久网| www黄色日本| 日韩在线免费电影| www.久久精品| 成人a在线视频| 波多野结衣国产| 亚洲精品午夜av福利久久蜜桃| 亚洲黄色av女优在线观看| 高清一区在线观看| 国产亚洲成av人片在线观看| 椎名由奈av一区二区三区| 欧美极品色图| 囯产精品一品二区三区| 麻豆精品精品国产自在97香蕉 | 中文在线免费二区三区| 亚洲欧美日韩久久| 天堂精品一区二区三区| 少妇无码一区二区三区| 国产在线日韩欧美| 国产精品久久久久久久7电影| 国产中文字幕免费| 亚洲经典一区| 日韩在线观看视频免费| 短视频在线观看| 红杏aⅴ成人免费视频| 3d成人h动漫网站入口| 日韩精品一区中文字幕| 天堂电影一区| 亚洲高清视频在线| 欧美黄色免费网址| 国产激情小视频在线| 欧美国产日韩一二三区| 欧美另类视频在线| 亚欧在线观看视频| 99久久精品国产一区二区三区| 97av影视网在线观看| 91精品国产乱码久久久久| 日本不卡视频一二三区| 青草热久免费精品视频| 久久久国产高清| 亚洲每日更新| 97久久精品人人澡人人爽缅北| 青娱乐在线视频免费观看| 欧美在线免费| 欧美wwwxxxx| 劲爆欧美第一页| 欧美精品偷拍| 午夜精品一区二区三区在线播放| 九九九国产视频| 精品不卡视频| 97超级碰在线看视频免费在线看| xxxx 国产| 国产日韩视频| 欧美在线视频一二三| 国产精品久久久久久人| 日韩不卡一二三区| 国产精品女主播视频| 中文字幕人妻一区二区在线视频 | 久热av在线| 久久久久久久精| 秋霞久久久久久一区二区| 国产中文字幕在线看| 国产精品免费视频一区| 91手机视频在线| 亚洲精品白浆| 婷婷开心久久网| 亚洲国产精品毛片av不卡在线| 国产精品久久久久av电视剧| 欧美高清视频www夜色资源网| 北条麻妃亚洲一区| 久久99精品国产自在现线| 日韩精品视频免费在线观看| 亚洲综合欧美综合| 久久久久久免费视频| 久久99久久亚洲国产| 欧美三级韩国三级日本三斤在线观看| 每日更新成人在线视频| 国产欧美在线看| 免费观看成年人视频| 99久久伊人精品| 四虎永久国产精品| 欧美寡妇性猛交xxx免费| 欧美性猛交xxxx免费看漫画 | 国产一区二区免费| 黄色a级片在线观看| 牛牛国产精品| 国产成人鲁鲁免费视频a| 夜夜嗨aⅴ一区二区三区| 国产成人精品www牛牛影视| 久久综合九色99| 秋霞成人影院| 狠狠色狠狠色综合日日五| 中文字幕第88页| 国产成人澳门| 三级精品视频久久久久| 国产香蕉在线视频| 蜜乳av一区二区| 精品福利影视| 粗大黑人巨茎大战欧美成人| 色菇凉天天综合网| 国产av一区二区三区传媒| 日韩成人激情| 91av在线网站| 亚洲av无码乱码在线观看性色| 久久久国产精华| www.国产在线播放| 日韩黄色碟片| 亚洲欧洲美洲在线综合| 加勒比av在线播放| 久草热8精品视频在线观看| 蜜桃麻豆91| 国产乱码在线| 欧美一区二区久久| 成人欧美一区二区三区黑人一| 亚洲少妇一区| 国产欧美日韩一区二区三区| 嫩草香蕉在线91一二三区| 色综合久久综合网欧美综合网| 欧洲成人午夜精品无码区久久| 日韩中文首页| 国产精品久久久久久亚洲调教| 无套内谢的新婚少妇国语播放| 欧美国产丝袜视频| 无码少妇一区二区三区芒果| 极品束缚调教一区二区网站 | 亚洲男人av| 亚洲精品在线免费播放| 四虎免费在线视频| 精一区二区三区| 亚洲精品在线视频观看| 欧洲一区二区三区精品| 日韩成人av在线播放| 国产在线拍揄自揄拍无码视频| 国产伦精品一区二区三区在线观看| 婷婷四房综合激情五月| 久久夜夜操妹子| 亚洲午夜精品久久久久久久久久久久| 少妇一级淫片免费放中国| 99精品久久99久久久久| 久久久999视频| 午夜精品福利影院| 日本sm极度另类视频| 精品999视频| 在线这里只有精品| 中文字幕第二区| 久久精品99国产精品| 一区二区三区四区五区精品| 24小时成人在线视频| www.久久色.com| 国产av一区二区三区| 一区二区在线观看视频| 极品白嫩的小少妇| 18成人免费观看视频| 九色一区二区| 97久久香蕉国产线看观看| 最近2019中文字幕在线高清| 在线免费看91| 亚洲乱码中文字幕综合| 亚洲一区和二区| 国产农村妇女毛片精品久久莱园子 | 国产女18毛片多18精品| 一区二区三区成人在线视频| 国产精品麻豆入口| 久久精品伊人| 中文字幕久久综合| 成人福利一区| 日韩av片免费在线观看| 在线观看免费网站黄| 91麻豆精品国产91| 国产精品50页| 欧美极品美女视频| 亚洲精品鲁一鲁一区二区三区 | 成人羞羞网站入口免费| 91九色综合久久| av色在线观看| 中文字幕av一区中文字幕天堂| 国产一区二区自拍视频| 亚洲国产欧美日韩另类综合| 妺妺窝人体色WWW精品| 国产一区二区伦理片| 亚洲中文字幕无码av永久| 国产一区毛片| 成人av免费看| 88xx成人网| 久久欧美在线电影| 最新国产在线观看| 亚洲激情第一页| 91 中文字幕| 欧美性极品xxxx做受| 欧美丰满熟妇bbbbbb| 久久新电视剧免费观看| 色综合五月婷婷| 久久综合激情| 成人在线免费高清视频| 成人在线免费观看视频| 好吊妞www.84com只有这里才有精品| 99热播精品免费| 亚洲18私人小影院| 国产在线观看a视频| 亚洲人成亚洲人成在线观看| 精品久久人妻av中文字幕| 91福利精品第一导航| 精品处破女学生| 综合激情成人伊人| 极品蜜桃臀肥臀-x88av| 99热这里都是精品| 中文字幕无人区二| 国产麻豆一精品一av一免费| 99热成人精品热久久66| 欧美视频网站| 色撸撸在线观看| 欧美日韩水蜜桃| 欧美日本亚洲| 欧美精品国产白浆久久久久| 97久久精品午夜一区二区| 精品久久99| 奇米四色中文综合久久| а√天堂8资源中文在线| 欧美第一黄色网| 二区三区在线观看| 久久国产精品久久国产精品| 最新97超碰在线| 中文字幕日韩欧美在线| 国产午夜在线视频| 亚洲精品在线视频| 你懂的视频在线观看| 日韩av在线天堂网| 天堂91在线| 日韩精品免费一线在线观看| 欧美一级在线免费观看| 精品日韩在线观看| 亚洲黄色精品视频| 精品少妇一区二区三区在线播放| 国产色在线视频| 91精品久久久久久久99蜜桃| 国产孕妇孕交大片孕| 欧美日韩国产精品自在自线| 中文字幕制服诱惑| 欧美日韩成人一区二区| 国产精品久久久久久在线| 欧美日韩aaa| 国产一区二区麻豆| 51午夜精品国产| 99久久国产热无码精品免费| 欧美一区二区精品久久911| 国产喷水福利在线视频| 日韩一区二区三区视频在线 | 日韩熟女一区二区| 91黄色免费观看| 亚洲一级片免费看| 欧美人牲a欧美精品| 88av在线视频| 精品日韩一区二区三区免费视频| 日韩中文字幕免费观看| 亚洲国产精品美女| 风间由美一区| 久热精品视频在线观看一区| 色呦呦网站在线观看| 久久免费视频在线观看| 欧美成人黑人| 91精品国产综合久久香蕉922| 日本少妇精品亚洲第一区| 国产 高清 精品 在线 a| 狼人精品一区二区三区在线 | 日韩www视频| 国产欧美日韩卡一| 男女做暖暖视频| 婷婷久久综合九色综合绿巨人| jizz国产在线观看| 欧美日韩精品二区第二页| 亚洲av无码一区二区乱子伦 | 国产chinese精品一区二区| 亚洲最大在线| 一区二区视频在线免费| 亚洲东热激情| 国产原创精品在线| 成人av电影在线观看| 美国精品一区二区| 亚洲国产精品一区二区www| 91黑人精品一区二区三区| 欧美一区二区三区啪啪| 奇米影视888狠狠狠777不卡| 最新的欧美黄色| 三级在线观看视频| 国产一区二区香蕉| 窝窝社区一区二区| 麻豆一区二区三区在线观看| 久久这里只有| 亚洲av人人澡人人爽人人夜夜| 中文字幕欧美三区| 日韩av一区二区在线播放| 欧美日韩另类国产亚洲欧美一级| 天天干天天草天天射| 精品国偷自产在线视频99| 免费成人在线电影| 97人人模人人爽人人喊38tv| 日韩激情一区| 男女午夜激情视频| 国产91丝袜在线播放九色| 极品尤物一区二区| 丁香五六月婷婷久久激情| 国产裸体无遮挡| 国产一区二区成人| 桃色av一区二区| 成人在线免费网站| 99久久激情| 2025韩国理伦片在线观看| 99国产精品国产精品毛片| 亚洲国产精品免费在线观看| 在线观看日韩毛片| 色鬼7777久久| 久久久久久网址| 亚洲性视频在线| 日韩第一页在线观看| 毛片av一区二区| 免费视频91蜜桃| 欧美日韩亚洲国产一区| 色哟哟中文字幕| 欧美国产日韩二区| 日韩成人久久| 大地资源网在线观看免费官网| 日本美女一区二区| 谁有免费的黄色网址| 色哟哟国产精品| 你懂的好爽在线观看| 欧美中文字幕视频在线观看| 精品丝袜久久| av免费观看大全| 成人黄页毛片网站| 日韩欧美a级片| 亚洲国产成人一区| av在线不卡免费| 久久99久久99精品蜜柚传媒| 在线亚洲激情| 极品人妻一区二区三区| 欧美日韩国产丝袜另类| 午夜性色福利影院| 18性欧美xxxⅹ性满足| 亚洲都市激情| 免费在线观看毛片网站| 国产亚洲一区二区三区四区| 亚洲 日本 欧美 中文幕| 怡红院精品视频| 成人精品高清在线视频| 在线观看一区二区三区三州| 久久99热这里只有精品| 搜索黄色一级片| 日韩欧美国产一区在线观看| 1234区中文字幕在线观看| 麻豆av一区| 免费欧美在线视频| 五月综合色婷婷| 日韩欧美国产三级电影视频| av免费不卡| 久久精品人成| 蜜臀久久99精品久久久久久9| 影音先锋男人看片资源| 91精品欧美福利在线观看| 欧美高清另类hdvideosexjaⅴ | 欧美在线电影| 精品亚洲视频在线| 亚洲成av人片www| 黄色在线视频观看网站| 成人春色激情网| 在线国产精品一区| 国产123在线| 欧美一区二区黄| 中文字幕在线看片| 亚洲精品视频一区二区三区| 国产成人精品免费网站| 天天干天天干天天操| 久久久91精品| 久久综合社区| 九色porny自拍| 亚洲制服丝袜在线| 国产一级二级三级在线观看| 亚洲iv一区二区三区| 一区二区福利| 免费在线观看黄色小视频| 精品国产一区二区三区忘忧草| 第84页国产精品| 性做爰过程免费播放| 97精品久久久午夜一区二区三区| 中文字幕在线播放日韩| 久久久久国产视频| 99热国内精品| 久久精品综合视频| 欧美一级二级在线观看| 欧美黑人疯狂性受xxxxx野外| 亚洲欧美日韩不卡| 国产亚洲成aⅴ人片在线观看| 国产不卡精品视频| 国产精品三级久久久久久电影| 在线精品亚洲| 动漫性做爰视频|