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

使用nacos實現自定義文本配置的實時刷新

 更新時間:2024年05月08日 08:40:24   作者:花自飄0水自流  
我們都知道,使用Nacos時,如果將Bean使用@RefreshScope標注之后,這個Bean中的配置就會做到實時刷新,本文給大家介紹了如何使用nacos實現自定義文本配置的實時刷新,需要的朋友可以參考下

一、背景

我們都知道,使用Nacos時,如果將Bean使用@RefreshScope標注之后,這個Bean中的配置就會做到實時刷新。

但是,我們有時候使用nacos配置的并不是key-value形式的配置文件,而是txt形式的或者其他文本格式,就無法使用@RefreshScope進行動態(tài)實時刷新了。

所以,我這里自行擴展了一個框架,可以稍微簡化一些開發(fā)人員的工作。

二、編碼

1、spring.factories

在resources創(chuàng)建META-INF目錄,創(chuàng)建spring.factories文件

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.test.NacosLoaderConfiguration

2、NacosPropertiesLoader

/**
 * nacos配置加載器
 */
public interface NacosPropertiesLoader {


    /**
     * 獲取dataId
     */
    String getDataId();

    /**
     * 配置刷新的回調
     */
    void getConfigData(String configData);
}

3、NacosConfigHandler

import com.alibaba.cloud.nacos.NacosConfigManager;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.config.listener.AbstractListener;
import com.alibaba.nacos.api.exception.NacosException;
import org.springframework.beans.BeansException;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ApplicationListener;

import java.util.List;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;

public class NacosConfigHandler implements ApplicationListener<ApplicationReadyEvent>, ApplicationContextAware {

    private final NacosConfigManager nacosConfigManager;

    List<NacosPropertiesLoader> nacosPropertiesLoaderList = new CopyOnWriteArrayList<>();

    private String groupId;


    public NacosConfigHandler(NacosConfigManager nacosConfigManager) {
        this.nacosConfigManager = nacosConfigManager;
    }


    @Override
    public void onApplicationEvent(ApplicationReadyEvent event) {
        // 容器環(huán)境準備完畢了,加載配置
        ConfigService configService = nacosConfigManager.getConfigService();

        try {
            // 加載所有的配置,并設置監(jiān)聽器
            for (NacosPropertiesLoader nacosPropertiesLoader : nacosPropertiesLoaderList) {

                nacosPropertiesLoader.getConfigData(
                        configService.getConfig(nacosPropertiesLoader.getDataId(), groupId, 3000)
                );

                configService.addListener(nacosPropertiesLoader.getDataId(), groupId, new AbstractListener() {
                    @Override
                    public void receiveConfigInfo(String configInfo) {
                        nacosPropertiesLoader.getConfigData(configInfo);
                    }
                });

            }
        } catch (NacosException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        Map<String, NacosPropertiesLoader> nacosPropertiesLoaderBeans = applicationContext.getBeansOfType(NacosPropertiesLoader.class);
        if (nacosPropertiesLoaderBeans == null) {
            return;
        }
        for (NacosPropertiesLoader value : nacosPropertiesLoaderBeans.values()) {
            nacosPropertiesLoaderList.add(value);
        }

        // 從配置中讀取nacos.group  nacos的groupId
        groupId = applicationContext.getEnvironment().getProperty("nacos.group");

    }
}

4、NacosLoaderConfiguration

import com.alibaba.cloud.nacos.NacosConfigManager;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.context.annotation.Bean;

@ConditionalOnBean(NacosConfigManager.class)
public class NacosLoaderConfiguration {

    @Bean
    public NacosConfigHandler nacosConfigHandler(NacosConfigManager nacosConfigManager) {
        return new NacosConfigHandler(nacosConfigManager);
    }
}

5、測試類

import org.springframework.stereotype.Component;

@Component
public class TestConfigLoader1 implements NacosPropertiesLoader {
    @Override
    public String getDataId() {
        return "test";
    }

    @Override
    public void getConfigData(String configData) {

        System.out.println("獲取了配置1:" + configData);
    }
}

import org.springframework.stereotype.Component;

@Component
public class TestConfigLoader2 implements NacosPropertiesLoader {
    @Override
    public String getDataId() {
        return "test1";
    }

    @Override
    public void getConfigData(String configData) {

        System.out.println("獲取了配置2:" + configData);
    }
}

我們在nacos創(chuàng)建test、test1命名的dataId,修改配置就會調用到getConfigData,實時獲取配置了。

6、擴展

因為我們第一次從nacos中獲取配置是基于ApplicationReadyEvent 事件,所以數據處理時間會晚于這個時間。

如果說要加載本地文件,本地文件加載時間要早于ApplicationReadyEvent 觸發(fā)的時間,可以考慮使用Bean初始化的生命周期。

以上就是使用nacos實現自定義文本配置的實時刷新的詳細內容,更多關于nacos文本配置實時刷新的資料請關注腳本之家其它相關文章!

相關文章

  • Java十分鐘精通異常處理機制

    Java十分鐘精通異常處理機制

    異常就是不正常,比如當我們身體出現了異常我們會根據身體情況選擇喝開水、吃藥、看病、等?異常處理方法。?java異常處理機制是我們java語言使用異常處理機制為程序提供了錯誤處理的能力,程序出現的錯誤,程序可以安全的退出,以保證程序正常的運行等
    2022-03-03
  • java操作ElasticSearch聚合查詢的示例代碼

    java操作ElasticSearch聚合查詢的示例代碼

    這篇文章主要介紹了java操作ElasticSearch聚合查詢的示例代碼,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2024-08-08
  • jtds1.1連接sqlserver2000測試示例

    jtds1.1連接sqlserver2000測試示例

    這篇文章主要介紹了jtds1.1連接sqlserver2000測試示例,需要的朋友可以參考下
    2014-02-02
  • Java數據結構之鏈表、棧、隊列、樹的實現方法示例

    Java數據結構之鏈表、棧、隊列、樹的實現方法示例

    這篇文章主要介紹了Java數據結構之鏈表、棧、隊列、樹的實現方法,結合實例形式分析了Java數據結構中鏈表、棧、隊列、樹的功能、定義及使用方法,需要的朋友可以參考下
    2019-03-03
  • spring boot(一)之入門篇

    spring boot(一)之入門篇

    Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發(fā)過程。接下來通過本文給大家介紹spring boot入門知識,需要的朋友參考下吧
    2017-05-05
  • Java中的接口多繼承機制

    Java中的接口多繼承機制

    大家好,本篇文章主要講的是Java中的接口多繼承機制,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • mybatis攔截器與分頁插件實例教程

    mybatis攔截器與分頁插件實例教程

    Mybatis攔截器常常會被用來進行分頁處理。所以下面這篇文章主要給大家介紹了關于mybatis攔截器與分頁插件的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用mybatis具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-04-04
  • Java實現帶有權重隨機算法的示例詳解

    Java實現帶有權重隨機算法的示例詳解

    這篇文章主要為大家詳細介紹了Java如何實現帶有權重隨機算法,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-10-10
  • Java的異常體系以及File類構造方法詳解

    Java的異常體系以及File類構造方法詳解

    這篇文章主要為大家介紹了Java的異常體系以及File類構造方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Java將不同的List集合復制到另一個集合常見的方法

    Java將不同的List集合復制到另一個集合常見的方法

    在Java中,有時候我們需要將一個List對象的屬性值復制到另一個List對象中,使得兩個對象的屬性值相同,這篇文章主要介紹了Java將不同的List集合復制到另一個集合常見的方法,需要的朋友可以參考下
    2024-09-09

最新評論