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

讀寫nacos的配置中心的參數(shù)及變動(dòng)監(jiān)聽方式

 更新時(shí)間:2026年02月11日 17:16:19   作者:OK_boom  
Spring應(yīng)用可以通過NacosDataSource下載配置參數(shù),使用ConfigService的publishConfig方法更新Nacos上的配置,但同一服務(wù)內(nèi)部更新配置不會(huì)觸發(fā)configUpdate事件,ConfigService也提供了監(jiān)聽事件功能

nacos有配置中心的功能,那么spring應(yīng)用如何下載nacos的配置參數(shù)?

最簡單的方法

是借組sentinel的NacosDataSource完成這個(gè)操作,如下例子:


@Configuration
@Slf4j
@Getter
public class AuthenConfig {
  @Value("${spring.cloud.nacos.discovery.server-addr}")
  private String nacosAddrs;
  private String groupId="my-seta-business";
  private String dataId="my-seta-business:authen-Config";

  private EasyShiroProperties properties;
  @PostConstruct
  public void init(){
    ReadableDataSource<String, EasyShiroProperties> nacosDataSource = new NacosDataSource<>(nacosAddrs, groupId, dataId,
            source -> JsonUtils.fromJson(source, new TypeReference<>() {
            }));
    synchronized (nacosDataSource.getProperty()) {
      nacosDataSource.getProperty().addListener(new PropertyListener(){
        private void updateLocal(Object value){
          properties=(EasyShiroProperties)value;
        }
        @Override
        public void configUpdate(Object value) { //nacos的配置更新時(shí)觸發(fā)
           log.info("configUpdate:"+value);
           updateLocal(value);
        }

        @Override
        public void configLoad(Object value) {//第一次下載nacos配置時(shí)觸發(fā)
          log.info("configLoad:"+value);
          updateLocal(value);
        }
      });
    }
  }
}

監(jiān)聽器有兩個(gè)事件

一個(gè)是首次下載觸發(fā)的configLoad,一個(gè)是nacos配置更新觸發(fā)的configUpload。

那么如何用代碼更新nacos上的配置?用ConfigService的publishConfig,下面例子:

String groupId="my-seta-business";
    String dataId="my-seta-business:authen-Config";
    try {
      ConfigService configService = NacosFactory.createConfigService("128.30.14.249:8848");
      System.out.println(configService.publishConfig(dataId, groupId, "{\"sessionTimeOut\":3600,\"cacheEnabled\":true,\"sessionRegion\":\"my-seata-business-region\",\"sessionTokenName\":\"access-token\",\"jwtTokenName\":\"access-token\"}"));
    } catch (NacosException e) {
      e.printStackTrace();
    }

值得注意的是

同一個(gè)服務(wù)里面即使用上述方法更新配置到nacos,也不會(huì)觸發(fā)configUpdate事件,configUpdate必須是本服務(wù)以外的地方發(fā)生更新才會(huì)觸發(fā),可見作者比較嚴(yán)謹(jǐn)。

如果我沒用sentinel,只想用ConfigService監(jiān)聽配置中心的數(shù)據(jù)異動(dòng)又怎樣做呢?ConfigService也有監(jiān)聽事件,代碼如下 :

/**
 * Created by rocklee on 2022/4/20 14:13
 */
@Slf4j
@Configuration
public class AccountConfig implements InitializingBean , DisposableBean {
  @Value("${spring.application.name}")
  private String app;
  @Value("${spring.profiles.active:}")
  private String profile;
  @Value("${spring.cloud.nacos.config.file-extension}")
  private String fileExtension;
  @Value("${spring.cloud.nacos.config.server-addr}")
  private String configServerAddr;
  private ConfigService configService;
  @PostConstruct
  public void init(){
  }

  @Override
  public void afterPropertiesSet() throws Exception {
    String dataId=app+(StringUtils.isBlank(profile)?"": "-"+profile)+"."+fileExtension;
    final String group="DEFAULT_GROUP";
    Properties properties=new Properties();
    properties.put(PropertyKeyConst.SERVER_ADDR, configServerAddr);
    configService= NacosFactory.createConfigService(properties);
    log.info("nacos config:"+configService.getConfig(dataId,group,1000));
    try {
      configService.addListener(dataId, group, new AbstractListener() {
        @Override
        public void receiveConfigInfo(String configInfo) {
          System.out.println(configInfo);
        }
      });
    } catch (NacosException e) {
      e.printStackTrace();
    }
  }

  @Override
  public void destroy() throws Exception {
    configService.shutDown();
  }
}

總結(jié)

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

相關(guān)文章

  • Mybatis mapper接口動(dòng)態(tài)代理開發(fā)步驟解析

    Mybatis mapper接口動(dòng)態(tài)代理開發(fā)步驟解析

    這篇文章主要介紹了Mybatis mapper接口動(dòng)態(tài)代理開發(fā)步驟解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Swagger在java中的運(yùn)用及常見問題解決

    Swagger在java中的運(yùn)用及常見問題解決

    Swagger插件是一款深受Java開發(fā)者喜愛的工具,它在前后端分離的開發(fā)模式下發(fā)揮著重要作用,這篇文章主要介紹了Swagger在java中的運(yùn)用及常見問題的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-06-06
  • hibernate 常用方法介紹

    hibernate 常用方法介紹

    這篇文章介紹了hibernate的常用方法,有需要的朋友可以參考一下
    2013-09-09
  • Springboot集成CSRF防攻擊過程

    Springboot集成CSRF防攻擊過程

    本文介紹了Springboot集成CSRF防攻擊的方法,通過設(shè)置域名或路徑白名單來過濾未知鏈接,從而達(dá)到防護(hù)目的,主要涉及兩個(gè)類:CSRFFilterConfigUtils防護(hù)配置工具類和CsrfFilter防護(hù)過濾類
    2025-11-11
  • Spring解決泛型擦除的思路詳解

    Spring解決泛型擦除的思路詳解

    這篇文章主要介紹了Spring解決泛型擦除的思路,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-01-01
  • java實(shí)現(xiàn)客戶端向服務(wù)器發(fā)送文件

    java實(shí)現(xiàn)客戶端向服務(wù)器發(fā)送文件

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)客戶端向服務(wù)器發(fā)送文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 詳解高性能緩存Caffeine原理及實(shí)戰(zhàn)

    詳解高性能緩存Caffeine原理及實(shí)戰(zhàn)

    Caffeine是基于Java 8開發(fā)的,提供了近乎最佳命中率的高性能本地緩存組件,Spring5開始不再支持Guava Cache,改為使用Caffeine。Caffeine提供的內(nèi)存緩存使用參考Google guava的API
    2021-06-06
  • Java 單鏈表數(shù)據(jù)結(jié)構(gòu)的增刪改查教程

    Java 單鏈表數(shù)據(jù)結(jié)構(gòu)的增刪改查教程

    這篇文章主要介紹了Java 單鏈表數(shù)據(jù)結(jié)構(gòu)的增刪改查教程,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Java實(shí)現(xiàn)多個(gè)數(shù)組間的排列組合

    Java實(shí)現(xiàn)多個(gè)數(shù)組間的排列組合

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)多個(gè)數(shù)組間的排列組合,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • JAVA驗(yàn)證碼工具實(shí)例代碼

    JAVA驗(yàn)證碼工具實(shí)例代碼

    這篇文章主要介紹了JAVA驗(yàn)證碼工具實(shí)例代碼,需要的朋友可以參考下
    2018-03-03

最新評論

宁国市| 泾源县| 定西市| 义乌市| 朝阳县| 乾安县| 江口县| 图们市| 繁峙县| 博罗县| 凯里市| 黄大仙区| 乐清市| 佛冈县| 南充市| 永平县| 周至县| 琼结县| 南宫市| 塘沽区| 砚山县| 苗栗市| 若羌县| 台东市| 根河市| 瓮安县| 罗田县| 景宁| 乌兰县| 揭阳市| 阜平县| 湛江市| 青海省| 晴隆县| 枣强县| 无棣县| 民乐县| 赤城县| 依安县| 新丰县| 古丈县|