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

Nacos作為配置中心注冊監(jiān)聽器方法

 更新時間:2023年02月07日 10:08:37   作者:你家寶寶  
本文主要討論Nacos作為配置中心時,其中配置內(nèi)容發(fā)生更改時,我們的應(yīng)用程序能夠做的事。一般使用監(jiān)聽器來實現(xiàn)這步操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧

前言

本文主要討論Nacos作為配置中心時,其中配置內(nèi)容發(fā)生更改時,我們的應(yīng)用程序能夠做的事。

一般使用監(jiān)聽器來實現(xiàn)這步操作。

對應(yīng)的監(jiān)聽器接口是:com.alibaba.nacos.api.config.listener.Listener

接下來看看如何注冊一個監(jiān)聽器。

項目文件說明

以下操作都是在 SpringBoot項目中。以下是部分代碼,完整代碼請訪問代碼倉庫:

https://gitee.com/fengsoshuai/junzi-navigation.git

pom依賴

        <!-- Nacos讀取配置-->
      <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        <version>2021.1</version>
      </dependency>

bootstrap.yml

spring:
  cloud:
    nacos:
      # nacos配置
      config:
        username: nacos
        password: nacos
        server-addr: localhost:80
        namespace: junzi

# nacos 監(jiān)聽的dataId
nacos:
  listener:
    dataId:
      - bussiness-param.json
      - junzi-navigation.yml

NacosConfig配置類

主要是讀取配置內(nèi)容,生成類 com.alibaba.nacos.api.config.ConfigService的實例。

讀取的是 bootstrap.yml 中的連接nacos需要的屬性字段。

package org.feng.navigation.config;
import com.alibaba.cloud.nacos.NacosConfigProperties;
import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.PropertyKeyConst;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.exception.NacosException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.annotation.Resource;
import java.util.Properties;
/**
 * Nacos 配置
 *
 * @version V1.0
 */
@Slf4j
@Configuration
public class NacosConfig {
    @Resource
    private NacosConfigProperties nacosConfigProperties;
    @Bean
    public ConfigService configService() {
        Properties properties = new Properties();
        properties.setProperty(PropertyKeyConst.SERVER_ADDR, nacosConfigProperties.getServerAddr());
        properties.setProperty(PropertyKeyConst.NAMESPACE, nacosConfigProperties.getNamespace());
        properties.setProperty(PropertyKeyConst.USERNAME, nacosConfigProperties.getUsername());
        properties.setProperty(PropertyKeyConst.PASSWORD, nacosConfigProperties.getPassword());
        ConfigService configServiceInstance;
        try {
            configServiceInstance = NacosFactory.createConfigService(properties);
        } catch (NacosException e) {
            log.error("初始化Nacos配置出錯 {}", e.getMessage());
            return null;
        }
        return configServiceInstance;
    }
}

監(jiān)聽器實現(xiàn)類-默認(rèn)實現(xiàn)

監(jiān)聽到Nacos內(nèi)容發(fā)生更改,只打印日志。

package org.feng.navigation.listener;
import com.alibaba.nacos.api.config.listener.Listener;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.Executor;
/**
 * Nacos 監(jiān)聽器
 *
 * @version V1.0
 */
@Slf4j
public class DefaultNacosConfigListener implements Listener {
    @Override
    public Executor getExecutor() {
        return null;
    }
    @Override
    public void receiveConfigInfo(String configInfo) {
        log.info("Nacos配置內(nèi)容發(fā)生更改:{}", configInfo);
    }
}

監(jiān)聽器實現(xiàn)類-json配置處理

在Nacos中增加配置:

內(nèi)容是一個json串:

package org.feng.navigation.listener;
import com.alibaba.nacos.api.config.listener.Listener;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.feng.navigation.common.util.GsonUtil;
import java.util.concurrent.Executor;
/**
 * Nacos 監(jiān)聽json數(shù)據(jù)
 *
 * @version V1.0
 */
@Slf4j
@AllArgsConstructor
public class JsonFileNacosConfigListener<T> implements Listener {
    private Class<T> instanceClass;
    @Override
    public Executor getExecutor() {
        return null;
    }
    @Override
    public void receiveConfigInfo(String configInfo) {
        boolean isJson = GsonUtil.validateJson(configInfo);
        if (!isJson) {
            log.error("Nacos配置錯誤,當(dāng)前配置不是一個有效的JSON");
            return;
        }
        T instance = GsonUtil.fromJson(configInfo, instanceClass);
        log.info("將Nacos配置的json數(shù)據(jù)轉(zhuǎn)換為實例:{}", instance);
    }
}

監(jiān)聽JSON配置,可以用來做一些業(yè)務(wù)實現(xiàn)。我這里暫是只將其序列化成某個類的實例。然后輸出日志,別的沒做。

真實業(yè)務(wù)場景,可以定制化一個這樣的類,來做你自己的業(yè)務(wù)。

注冊監(jiān)聽器

通過配置datId來注冊對應(yīng)的監(jiān)聽器:

# nacos 監(jiān)聽的dataId
nacos:
  listener:
    dataId:
      - bussiness-param.json
      - junzi-navigation.yml

這里通過dataId的后綴,識別到是哪種配置,然后注冊不同的監(jiān)聽器,用以實現(xiàn)不同的處理。

目前監(jiān)聽到 yml 配置,只輸出日志,使用默認(rèn)監(jiān)聽器。

監(jiān)聽到 json 內(nèi)容,會校驗是不是一個有效的json文件,然后將其序列化。

package org.feng.navigation.listener;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.exception.NacosException;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.List;
/**
 * 菌子Nacos配置監(jiān)聽器
 *
 * @version V1.0
 */
@Data
@Slf4j
@Configuration
public class JunZiNacosConfigListener {
    @Resource
    NacosConfigListenerProperties nacosConfigListenerProperties;
    private static final String GROUP = "junzi";
    @Resource
    private ConfigService configService;
    @PostConstruct
    private void init() throws NacosException {
        List<String> dataIdList = nacosConfigListenerProperties.getDataId();
        log.info("正在監(jiān)聽 group=junzi, nacos.listener.dataId={}", dataIdList);
        for (String dataId : dataIdList) {
            if (dataId.endsWith("yml")) {
                configService.addListener(dataId, GROUP, new DefaultNacosConfigListener());
                continue;
            }
            if (dataId.endsWith("json")) {
                configService.addListener(dataId, GROUP, new JsonFileNacosConfigListener<>(TestParse.class));
            }
        }
    }
    @Data
    @ConfigurationProperties("nacos.listener")
    public static class NacosConfigListenerProperties {
        private List<String> dataId;
    }
    @Data
    public static class TestParse {
        private Long code;
        private String reason;
        private Boolean success;
    }
}

監(jiān)聽器的效果

啟動項目后,修改 bussiness-param.json 配置的內(nèi)容:

點擊發(fā)布后,控制臺會輸出內(nèi)容:

o.f.n.l.JsonFileNacosConfigListener.receiveConfigInfo(JsonFileNacosConfigListener.java:37) : ![method=default,businessId=default] 將Nacos配置的json數(shù)據(jù)轉(zhuǎn)換為實例:JunZiNacosConfigListener.TestParse(code=666666, reason=作者真帥, success=false)

到此這篇關(guān)于Nacos作為配置中心注冊監(jiān)聽器方法的文章就介紹到這了,更多相關(guān)Nacos注冊監(jiān)聽器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java線程的基礎(chǔ)實例解析

    java線程的基礎(chǔ)實例解析

    java中線程的基本方法的熟練使用是精通多線程編程的必經(jīng)之路,線程相關(guān)的基本方法有wait,notify,notifyAll,sleep,join,yield等,本文淺要的介紹一下它們的使用方式
    2021-06-06
  • SpringBoot實現(xiàn)本地存儲文件上傳及提供HTTP訪問服務(wù)的方法

    SpringBoot實現(xiàn)本地存儲文件上傳及提供HTTP訪問服務(wù)的方法

    這篇文章主要介紹了SpringBoot實現(xiàn)本地存儲文件上傳及提供HTTP訪問服務(wù),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • 詳解Mybatis的分頁插件

    詳解Mybatis的分頁插件

    這篇文章主要介紹了詳解Mybatis的分頁插件,在 Mybatis中,如何對數(shù)據(jù)進行分頁是一個非常常見的問題,現(xiàn)在,我們可以通過使用 Mybatis 的分頁插件來實現(xiàn)對數(shù)據(jù)的分頁,需要的朋友可以參考下
    2023-05-05
  • 通過Java 程序獲取Word中指定圖片的坐標(biāo)位置

    通過Java 程序獲取Word中指定圖片的坐標(biāo)位置

    本文介紹通過Java程序獲取Word文檔中指定圖片的坐標(biāo)位置,程序運行環(huán)境是jdk1.8開發(fā)環(huán)境idea,通過java程序代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-05-05
  • Mybatis中攔截器的使用場景和技巧分享

    Mybatis中攔截器的使用場景和技巧分享

    Mybatis提供了一些機制,可以允許我們在做數(shù)據(jù)庫操作的時候進行我們額外的一些程序,當(dāng)然,這看起來并沒有JPA的EntityListener好用,本文小編將給大家詳細(xì)的介紹了Mybatis中攔截器的使用場景和技巧,需要的朋友可以參考下
    2023-10-10
  • java如何從不規(guī)則的字符串中截取出日期

    java如何從不規(guī)則的字符串中截取出日期

    這篇文章主要介紹了java從不規(guī)則的字符串中截取出日期的方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java面試常問的Runnable和Callable的區(qū)別

    java面試常問的Runnable和Callable的區(qū)別

    大家好,本篇文章主要講的是java面試常問的Runnable和Callable的區(qū)別,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • Java編程實現(xiàn)游戲中的簡單碰撞檢測功能示例

    Java編程實現(xiàn)游戲中的簡單碰撞檢測功能示例

    這篇文章主要介紹了Java編程中的簡單碰撞檢測功能,涉及java針對坐標(biāo)點的相關(guān)數(shù)學(xué)運算操作技巧,需要的朋友可以參考下
    2017-10-10
  • java實現(xiàn)水波紋擴散效果

    java實現(xiàn)水波紋擴散效果

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)水波紋擴散效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Java開發(fā)學(xué)習(xí) Java數(shù)組操作工具

    Java開發(fā)學(xué)習(xí) Java數(shù)組操作工具

    這篇文章主要為大家詳細(xì)介紹了自己編寫的Java數(shù)組操作工具,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04

最新評論

察雅县| 长宁区| 大厂| 扶绥县| 石景山区| 阿合奇县| 汉源县| 佳木斯市| 广水市| 专栏| 龙门县| 克什克腾旗| 北京市| 渭源县| 渭源县| 文水县| 谷城县| 济源市| 梁平县| 泗阳县| 凤阳县| 汝阳县| 武陟县| 汉中市| 望谟县| 钦州市| 宜阳县| 磐安县| 昆山市| 建德市| 南汇区| 定西市| 虞城县| 华亭县| 家居| 平武县| 宝丰县| 杭锦旗| 宜川县| 泗阳县| 波密县|