最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java動(dòng)態(tài)修改nacos的yml配置方式

 更新時(shí)間:2025年08月06日 16:46:05   作者:左邊的天堂  
文章介紹修改Nacos配置文件的兩種方式:snakeyaml忽略注釋但修改直接,eo-yaml保留注釋但格式變化,建議配置項(xiàng)多時(shí)用數(shù)據(jù)庫(kù)存儲(chǔ),強(qiáng)調(diào)實(shí)際應(yīng)用需充分評(píng)估和測(cè)試以確??煽啃?/div>

本文只介紹修改方案,沒(méi)有對(duì)方案的可靠性進(jìn)一步分析。如果涉及的nacos配置項(xiàng)很多,更建議采用數(shù)據(jù)庫(kù)表單獨(dú)存儲(chǔ),并對(duì)其進(jìn)行增刪改查。

1、需求

假設(shè)nacos上有一個(gè)test-dev.yml配置文件,其內(nèi)容如下:

# 快遞相關(guān)配置,accessToken每月需要更新一次
express:
  appKey: xxx
  appSecret: xxx
  accessToken: 123456789

現(xiàn)在需要把accessToken字段的值修改成1234

2、實(shí)現(xiàn)方式一

第一種方式使用snakeyaml

<dependency>
	<groupId>org.yaml</groupId>
	<artifactId>snakeyaml</artifactId>
	<version>2.0</version>
</dependency>

這種方式有個(gè)弊端就是會(huì)把配置的注釋行給忽略掉

@Value("${spring.profiles.active}")
private String profile;
@Value("${spring.cloud.nacos.config.server-addr}")
private String serverAddr;
private final String group = "DEFAULT_GROUP";

/**
 * 更新Nacos配置
 *
 * @param newAccessToken 
 * @return
 */
private Boolean updateCofig(String newAccessToken) {
   try {
       String dataId = String.format("test-%s.yml", profile);
       Properties properties = new Properties();
       properties.put("serverAddr", serverAddr);
       // 非public時(shí)需要設(shè)置
       properties.put("namespace", "test");
       // 讀取nacos配置
       // 推薦使用NacosConfigManager獲取當(dāng)前ConfigService
       ConfigService configService = NacosFactory.createConfigService(properties);
       String content = configService.getConfig(dataId, group, 5000);
       
       Yaml yaml = new Yaml();
       // 字符串轉(zhuǎn)換成map,這里會(huì)把注釋行丟棄
       Map<String, Object> data = yaml.load(content);
       // 字段覆蓋
       Map<String, Object> express = (Map<String, Object>) data.get("express");
       express.put("accessToken", newAccessToken);
       String yamlStr = yaml.dumpAsMap(data);
       //更新nacos配置
       return configService.publishConfig(dataId, group, yamlStr, ConfigType.YAML.getType());
   } catch (NacosException e) {
       e.printStackTrace();
   }
   return Boolean.FLASE;
}

執(zhí)行成功后,文件內(nèi)容被修改成

express:
  appKey: xxx
  appSecret: xxx
  accessToken: 1234

3、實(shí)現(xiàn)方式二

如果需要保留注釋?zhuān)瑒t可以用eo-yaml

<dependency>
    <groupId>com.amihaiemil.web</groupId>
    <artifactId>eo-yaml</artifactId>
    <version>7.0.8</version>
</dependency>

詳細(xì)代碼

@Autowired
private NacosConfigManager nacosConfigManager;
@Value("${spring.profiles.active}")
private String profile;
private final String group = "DEFAULT_GROUP";

/**
 * 更新Nacos配置
 *
 * @param newAccessToken
 * @return
 */
private Boolean updateConfig(String newAccessToken) {
    try {
        String dataId = String.format("test-%s.yml", profile);
        //讀取nacos配置
        ConfigService configService = nacosConfigManager.getConfigService();
        String content = configService.getConfig(dataId, group, 5000);
        //修改對(duì)應(yīng)的配置
        YamlMapping mapping = Yaml.createYamlInput(content).readYamlMapping();
        // log.info("{}", mapping.toString());
        YamlMapping express = mapping.value("express").asMapping();
        String accessToken = express.string("accessToken");
        // 如果兩個(gè)token一樣則忽略修改
        if(newAccessToken.equals(accessToken)){
            log.warn("token未變化,忽略");
            return true;
        }
        YamlMapping edited = new MergedYamlMapping(
        		// 原有配置
        		mapping,
        		// 需要更新的字段
                () -> Yaml.createYamlMappingBuilder()
                        .add("express", Yaml.createYamlMappingBuilder()
                                .add("accessToken", newAccessToken)
                                .build()
                        ).build(),
                // true-標(biāo)識(shí)覆蓋已有值,false則為追加新的字段
                true
        );
        //更新nacos配置
        return configService.publishConfig(dataId, group, edited.toString(), ConfigType.YAML.getType());
    } catch (NacosException | IOException e) {
       e.printStackTrace();
    }
    return Boolean.FALSE;
}

采用這種方式回寫(xiě)后的配置會(huì)給字符串加上雙引號(hào),并且空行會(huì)被移除。如:

# mybatis配置
mybatis:
  # 搜索指定包別名
  typeAliasesPackage: com.text.mapper
  # 配置mapper的掃描,找到所有的mapper.xml映射文件
  mapperLocations: classpath:mapper/**/*.xml

# 快遞相關(guān)配置,accessToken每月需要更新一次
express:
  appKey: xxx
  appSecret: xxx
  accessToken: 123456789

以上配置會(huì)被修改成

# mybatis配置
mybatis:
  # 搜索指定包別名
  typeAliasesPackage: com.text.mapper
  # 配置mapper的掃描,找到所有的mapper.xml映射文件
  mapperLocations: "classpath:mapper/**/*.xml"
# 快遞相關(guān)配置,accessToken每月需要更新一次
express:
  appKey: xxx
  appSecret: xxx
  accessToken: 1234

通常這些操作是不會(huì)受影響,但在實(shí)際應(yīng)用中還是要充分的評(píng)估和充足的測(cè)試,以保證萬(wàn)無(wú)一失。

總結(jié)

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

相關(guān)文章

  • JAVA如何判斷上傳文件后綴名是否符合規(guī)范MultipartFile

    JAVA如何判斷上傳文件后綴名是否符合規(guī)范MultipartFile

    這篇文章主要介紹了JAVA判斷上傳文件后綴名是否符合規(guī)范MultipartFile,文中通過(guò)實(shí)例代碼介紹了java實(shí)現(xiàn)對(duì)上傳文件做安全性檢查,需要的朋友可以參考下
    2023-11-11
  • Java中實(shí)現(xiàn)String.padLeft和String.padRight的示例

    Java中實(shí)現(xiàn)String.padLeft和String.padRight的示例

    本篇文章主要介紹了Java中實(shí)現(xiàn)String.padLeft和String.padRight,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • Spring框架花式創(chuàng)建Bean的n種方法(小結(jié))

    Spring框架花式創(chuàng)建Bean的n種方法(小結(jié))

    這篇文章主要介紹了Spring框架花式創(chuàng)建Bean的n種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Jmeter訪問(wèn)需要登錄的接口如何處理問(wèn)題

    Jmeter訪問(wèn)需要登錄的接口如何處理問(wèn)題

    這篇文章主要介紹了Jmeter訪問(wèn)需要登錄的接口如何處理問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • SpringBoot的異常處理流程是什么樣的?

    SpringBoot的異常處理流程是什么樣的?

    今天給大家?guī)?lái)的是Java的相關(guān)知識(shí),文章圍繞著SpringBoot的異常處理流程展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • 解讀nextLine().split(“[\\s]“)的意思

    解讀nextLine().split(“[\\s]“)的意思

    這篇文章主要介紹了解讀nextLine().split(“[\\s]“)的意思,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • springboot后臺(tái)session的存儲(chǔ)與取出方式

    springboot后臺(tái)session的存儲(chǔ)與取出方式

    這篇文章主要介紹了springboot后臺(tái)session的存儲(chǔ)與取出方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Java獲取登錄用戶的IP地址示例代碼

    Java獲取登錄用戶的IP地址示例代碼

    在開(kāi)發(fā)中我們經(jīng)常需要獲取用戶IP地址,通過(guò)地址來(lái)實(shí)現(xiàn)一些功能,下面這篇文章主要給大家介紹了關(guān)于Java獲取登錄用戶的IP地址的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • mybatis批量update時(shí)報(bào)錯(cuò)multi-statement not allow的問(wèn)題

    mybatis批量update時(shí)報(bào)錯(cuò)multi-statement not allow的問(wèn)題

    這篇文章主要介紹了mybatis批量update時(shí)報(bào)錯(cuò)multi-statement not allow的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Java實(shí)現(xiàn)上傳文件圖片到指定服務(wù)器目錄

    Java實(shí)現(xiàn)上傳文件圖片到指定服務(wù)器目錄

    本文通過(guò)實(shí)例代碼給大家介紹了java上傳文件圖片到指定服務(wù)器目錄的相關(guān)知識(shí),代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06

最新評(píng)論

沂南县| 五原县| 余庆县| 靖远县| 梓潼县| 保康县| 喀喇沁旗| 日喀则市| 东山县| 合作市| 维西| 普洱| 达拉特旗| 城固县| 祁阳县| 德令哈市| 晋江市| 遂川县| 桃源县| 三台县| 赣州市| 广水市| 都江堰市| 镇平县| 灵宝市| 蛟河市| 瑞安市| 红桥区| 宜川县| 鄂托克前旗| 肇东市| 乾安县| 唐山市| 濮阳市| 定州市| 获嘉县| 巴林右旗| 潮州市| 巍山| 溧阳市| 雷波县|