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

SpringBoot讀取自定義格式的Nacos配置的示例詳解

 更新時間:2025年10月14日 09:27:15   作者:java-yi  
在開發(fā)的過程中,如果遇到一些特殊情況,例如Java項目讀取.net項目的配置問題,由于.net項目的配置文件是非標準格式的自定義文件,需要springboot項目讀取自定義格式的nacos配置文件,所以本文給大家介紹了SpringBoot讀取自定義格式的Nacos配置的方法

前言

在開發(fā)的過程中,如果遇到一些特殊情況,例如Java項目讀取.net項目的配置問題,由于.net項目的配置文件是非標準格式(yaml、json等)的自定義文件,需要springboot項目讀取自定義格式的nacos配置文件;由于springboot不知道直接讀取,故需求使用一些其他方法;以下是springboot讀取.net的配置文件的live-common-setting自定義配置文件的案例

自定義Nacos加載Bean

自定義一個bean,該bean實現(xiàn)InitializingBean接口的afterPropertiesSet()

public class NacosConfigLocalCatch implements InitializingBean {
	/**
	 * 實現(xiàn)加載Nacos配置的邏輯
	 */
	@Override
	public void afterPropertiesSet() {
	}
}

自定義一個監(jiān)聽器,用于監(jiān)聽遠程nacos變更

Listener listener=new Listener(){
				@Override
				public Executor getExecutor() {
					return threadPoolExecutor;
				}
				@Override
				public void receiveConfigInfo(String configInfo) {
					log.info("{}#receiveConfigInfo receive configInfo. configInfo={}", configInfo);
					compile(configInfo, nacosConfigInfo);
				}
			}

自定義一個Nacos配置載體

package com.vzan.config.securityurl;

import lombok.Data;

/**
 * @author 歐益強
 * @date  2023年11月13日 下午2:14:37
 */
@Data
public class NacosConfigInfo {

    private String serverAddr;
    private String namespace;
    private String group;
    private String dataId;
    private boolean refresh = true;

    public NacosConfigInfo() {
    }
    public NacosConfigInfo(String serverAddr, String namespace, String group, String dataId, boolean refresh) {
        this.serverAddr = serverAddr;
        this.namespace = namespace;
        this.group = group;
        this.dataId = dataId;
        this.refresh = refresh;
    }
    public long getTimeout() {
        return 5000L;
    }

}

獲取監(jiān)聽bean完整類

/**
 *
 */
package com.vzan.config.securityurl;

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.config.listener.Listener;
import com.alibaba.nacos.api.exception.NacosException;
import com.google.common.collect.Lists;

import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.Executor;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * @author eakom
 * @date 2023年11月13日 下午2:11:46
 */
@Slf4j
public class NacosConfigLocalCatch implements InitializingBean {
	/**
	 * 定義需要獲取nacos配置的dataId
	 */
	private List<String> nacosConfigLocalCacheInfoList = Lists.newArrayList("live-common-setting");
	/**
	 * 定義一個map,存在配置到本定
	 */
	private Map<String, String> localCatchMap = new HashMap<>();

	@Resource
	private NacosConfigProperties nacosConfigProperties;

	private static ThreadPoolExecutor threadPoolExecutor;
	/**
	 * 初始化線程
	 */
	static {
		threadPoolExecutor = new ThreadPoolExecutor(2, 4, 1, TimeUnit.SECONDS, new LinkedBlockingDeque<>(100),
				new ThreadPoolExecutor.CallerRunsPolicy());
	}

	/**
	 * 實現(xiàn)加載Nacos配置的邏輯
	 */
	@Override
	public void afterPropertiesSet() {
		nacosConfigLocalCacheInfoList.forEach(k -> {
			NacosConfigInfo nacosConfigInfo = new NacosConfigInfo(nacosConfigProperties.getServerAddr(),
					nacosConfigProperties.getNamespace(), nacosConfigProperties.getGroup(), k, true);

			this.intNacosConfig(nacosConfigInfo);
		});
	}
	
	/**
	 * 獲取ConfigService
	 * 
	 * @param nacosConfigInfo NacosConfigInfo
	 * @return configService
	 */
	private ConfigService getConfigService(NacosConfigInfo nacosConfigInfo) {
		String serverAddr = nacosConfigInfo.getServerAddr();
		String nameSpace = nacosConfigInfo.getNamespace();
		Properties properties = new Properties();
		properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);
		if (!StringUtils.isEmpty(nameSpace)) {
			properties.put(PropertyKeyConst.NAMESPACE, nameSpace);
		}
		ConfigService configService;
		try {
			configService = NacosFactory.createConfigService(properties);
		} catch (NacosException e) {
			e.printStackTrace();
			throw new RuntimeException("Nacos config 配置 異常");
		}
		return configService;
	}
	
	/**
	 * 初始化Nacos配置
	 * @param nacosConfigInfo
	 */
	private void intNacosConfig(NacosConfigInfo nacosConfigInfo) {
		ConfigService configService = this.getConfigService(nacosConfigInfo);
		try {
			String config = configService.getConfig(nacosConfigInfo.getDataId(), 
				nacosConfigInfo.getGroup(),nacosConfigInfo.getTimeout());
			log.info("{}#afterPropertiesSet init configInfo. configInfo={}", config);
			// 初始化
			compile(config, nacosConfigInfo);
			// 監(jiān)聽
			configService.addListener(nacosConfigInfo.getDataId(), nacosConfigInfo.getGroup(), 
				new Listener(){
				@Override
				public Executor getExecutor() {
					return threadPoolExecutor;
				}
				@Override
				public void receiveConfigInfo(String configInfo) {
					log.info("{}#receiveConfigInfo receive configInfo. configInfo={}", configInfo);
					compile(configInfo, nacosConfigInfo);
				}
				});
		} catch (NacosException e) {
			e.printStackTrace();
			throw new RuntimeException("nacos server 監(jiān)聽 異常! dataId = " + nacosConfigInfo.getDataId());
		}
	}
	/**
	 * 加載nacos配置到本定環(huán)境
	 * @param config
	 * @param nacosConfigInfo
	 */
	private void compile(String config, NacosConfigInfo nacosConfigInfo) {
		if ("live-common-setting".equals(nacosConfigInfo.getDataId())) {
			LiveCommonSetting json = JSONUtil.toBean(config, LiveCommonSetting.class);
			if (json == null) {
				log.error("common配置解析失敗");
				return;
			}
		}
		localCatchMap.put(nacosConfigInfo.getDataId(), config);
	}

	

	public String get(String dataId) {
		return localCatchMap.get(dataId);
	}
	/**
	*獲取配置
	*/
	public LiveCommonSetting getLiveCommonSetting() {
		String config = localCatchMap.get("live-common-setting");
		LiveCommonSetting fromJson = JSONUtil.toBean(config, LiveCommonSetting.class);
		return fromJson;
	}

}

初始化bean

@Configuration(proxyBeanMethods = false)
public class SecurityUrlConfig {
	@Bean
	@ConditionalOnProperty(value = "enabled.securityUrl",matchIfMissing = false)
	public NacosConfigLocalCatch initNacosConfigLocalCatch() {
		NacosConfigLocalCatch config=new NacosConfigLocalCatch();
		return config;
	}
}

代碼中讀取配置直接getLiveCommonSetting() 這個方法即可。

到此這篇關(guān)于SpringBoot讀取自定義格式的Nacos配置的示例詳解的文章就介紹到這了,更多相關(guān)SpringBoot讀取Nacos配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Nacos框架服務(wù)注冊實現(xiàn)流程

    Nacos框架服務(wù)注冊實現(xiàn)流程

    這篇文章主要介紹了SpringCloud服務(wù)注冊之nacos實現(xiàn)過程,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • SpringCloud中Gateway實現(xiàn)鑒權(quán)的方法

    SpringCloud中Gateway實現(xiàn)鑒權(quán)的方法

    本文主要介紹了SpringCloud中Gateway實現(xiàn)鑒權(quán)的方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • idea插件開發(fā)之彈出框的示例代碼

    idea插件開發(fā)之彈出框的示例代碼

    這篇文章主要介紹了idea插件開發(fā)之彈出框的示例代碼,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Java Collection集合用法詳解

    Java Collection集合用法詳解

    首先Collection是屬于單列集合的頂層接口,表示為一組對象。其類型為引用數(shù)據(jù)類型,具體創(chuàng)建對象,通過多態(tài)的形式進行,本文將給大家詳細的介紹,需要的朋友可以參考下
    2021-10-10
  • Java中接口和抽象類的區(qū)別詳解

    Java中接口和抽象類的區(qū)別詳解

    這篇文章主要介紹了Java中接口和抽象類的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2020-07-07
  • Java計算兩個時間段的差的實例詳解

    Java計算兩個時間段的差的實例詳解

    在本篇內(nèi)容中,我們給大家整理了關(guān)于Java計算兩個時間段的差的實例內(nèi)容,并做了詳細分析,有需要的朋友們學(xué)習下。
    2022-11-11
  • Java使用阻塞隊列BlockingQueue實現(xiàn)生產(chǎn)者消費者的方法

    Java使用阻塞隊列BlockingQueue實現(xiàn)生產(chǎn)者消費者的方法

    BlockingQueue是一個支持阻塞插入和移除操作的隊列,常用于多線程環(huán)境下的生產(chǎn)者和消費者場景,文章介紹了阻塞隊列BlockingQueue的概念和其在生產(chǎn)者消費者模式中的應(yīng)用,提供了一個簡單的示例,展示了如何使用ArrayBlockingQueue來實現(xiàn)生產(chǎn)者消費者模式
    2024-11-11
  • 跨域解決方案Jsonp原理解析

    跨域解決方案Jsonp原理解析

    這篇文章主要介紹了跨域解決方案Jsonp原理解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2020-02-02
  • Spring boot redis cache的key的使用方法

    Spring boot redis cache的key的使用方法

    這篇文章主要介紹了Spring boot redis cache的key的使用方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2019-05-05
  • java實現(xiàn)將字符串中首字母轉(zhuǎn)換成大寫,其它全部轉(zhuǎn)換成小寫的方法示例

    java實現(xiàn)將字符串中首字母轉(zhuǎn)換成大寫,其它全部轉(zhuǎn)換成小寫的方法示例

    這篇文章主要介紹了java實現(xiàn)將字符串中首字母轉(zhuǎn)換成大寫,其它全部轉(zhuǎn)換成小寫的方法,涉及java字符串遍歷、轉(zhuǎn)換、拼接等相關(guān)操作技巧,需要的朋友可以參考下
    2019-06-06

最新評論

宁城县| 通州市| 黔西县| 弥勒县| 锦州市| 邹城市| 蒙山县| 田林县| 甘洛县| 长丰县| 交城县| 南开区| 白沙| 琼结县| 临漳县| 尼玛县| 县级市| 汉寿县| 诸暨市| 青海省| 永顺县| 常州市| 尼玛县| 泗水县| 沙湾县| 夏津县| 栾城县| 沅陵县| 五大连池市| 渝中区| 绥芬河市| 宁强县| 安徽省| 金堂县| 巴彦淖尔市| 达日县| 桦甸市| 黔江区| 奎屯市| 宁海县| 新龙县|