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

SpringBoot如何啟動自動加載自定義模塊yml文件(PropertySourceFactory)

 更新時(shí)間:2024年07月10日 09:00:27   作者:君哥聊編程  
這篇文章主要介紹了SpringBoot如何啟動自動加載自定義模塊yml文件(PropertySourceFactory),具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

參考:https://deinum.biz/2018-07-04-PropertySource-with-yaml-files/

背景

自定義模塊時(shí)經(jīng)常會編寫當(dāng)前模塊的一些核心yml配置,如果要被Spring容器加載到通常的做法是將自定義模塊的yml命名為application-模塊名.yml,比如db模塊命名為application-db.yml,然后再在spring.profiles.include中引入該db,即可加載到子模塊配置(前提是maven構(gòu)建時(shí)能夠?qū)esources資源目錄編譯進(jìn)去)。

上面說的這種限制有很多,子模塊對于父模塊是黑箱操作,我們無法得知有多少個(gè)子模塊要被include進(jìn)來,而且前綴必須以application開頭。

今天我們來看另外一種更加靈活的方式,自定義名稱的yml直接在子模塊中加載,各位朋友繼續(xù)往下看PropertySourceFactory如何實(shí)現(xiàn)。

總結(jié)3步走

定義一個(gè)YamlPropertySourceFactory,實(shí)現(xiàn)PropertySourceFactory,重寫createPropertySource方法

將接口給過來的資源流文件使用加載到spring提供的YmlPropertiesFactorBean中,由該工廠Bean產(chǎn)出一個(gè)Properties對象

將生成的Properties對象傳入PropertiesPropertySource中產(chǎn)出一個(gè)PropertySource對象

import lombok.AllArgsConstructor;
import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.core.env.PropertiesPropertySource;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.support.EncodedResource;
import org.springframework.core.io.support.PropertySourceFactory;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

/**
 * @description:
 * @author: jianjun.ren
 * @date: Created in 2020/9/24 12:05
 */
@AllArgsConstructor
public class YamlPropertySourceFactory implements PropertySourceFactory {
	//這個(gè)方法有2個(gè)入?yún)ⅲ謩e為資源名稱和資源對象,這是第一步
    public PropertySource< ? > createPropertySource(String name, EncodedResource resource) throws IOException {
    
    	//這是第二步,根據(jù)流對象產(chǎn)出Properties對象
        Properties propertiesFromYaml = loadYamlIntoProperties(resource);
        String sourceName = name != null ? name : resource.getResource().getFilename();
        assert sourceName != null;
        
        //這是第三部,根據(jù)Properties對象,產(chǎn)出PropertySource對象,放入到Spring中
        return new PropertiesPropertySource(sourceName, propertiesFromYaml);
    }

    private Properties loadYamlIntoProperties(EncodedResource resource) throws FileNotFoundException {
        try {
            YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
            factory.setResources(resource.getResource());
            factory.afterPropertiesSet();
            return factory.getObject();
        } catch (IllegalStateException e) {
            Throwable cause = e.getCause();
            if (cause instanceof FileNotFoundException) {
                throw (FileNotFoundException) e.getCause();
            }
            throw e;
        }
    }
}

創(chuàng)建咱們是說完了,小伙伴有很多問號,怎么去使用呢?

接下來我們再看康康:

在任意一個(gè)@Configuration類中,你自己寫一個(gè)也可以,反正能夠被Spring所掃描的

加入下面這段代碼,其實(shí)就一行:

@Configuration
//這個(gè)地方的YamlPropertySourceFactory就是上面編寫的代碼類
@PropertySource(factory = YamlPropertySourceFactory.class, value = "classpath:xxx-xxx.yml")
public class XXXXConfiguration {
		
}

最后

好了到這里就結(jié)束了,去使用看看效果吧~

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

相關(guān)文章

  • Spring?Cloud?通過?Gateway?webflux實(shí)現(xiàn)網(wǎng)關(guān)異常處理

    Spring?Cloud?通過?Gateway?webflux實(shí)現(xiàn)網(wǎng)關(guān)異常處理

    在某一個(gè)服務(wù)中出現(xiàn)異常,通過@ControllerAdvice?+?@ExceptionHandler?統(tǒng)一異常處理,即使在微服務(wù)架構(gòu)中,也可以將上述統(tǒng)一異常處理放入到公共的微服務(wù)中,這樣哪一個(gè)微服務(wù)需要,直接引入模塊,本文重點(diǎn)介紹Spring?Cloud?通過?Gateway?webflux實(shí)現(xiàn)網(wǎng)關(guān)異常處理,一起看看吧
    2023-11-11
  • 關(guān)于List、Map、Stream初始化方式

    關(guān)于List、Map、Stream初始化方式

    這篇文章主要介紹了關(guān)于List、Map、Stream初始化方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • java web中使用cookie記住用戶的賬號和密碼

    java web中使用cookie記住用戶的賬號和密碼

    這篇文章主要介紹了java web中使用cookie記住用戶的賬號和密碼的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • Java Eclipse進(jìn)行斷點(diǎn)調(diào)試的方法

    Java Eclipse進(jìn)行斷點(diǎn)調(diào)試的方法

    本篇文章主要介紹了Java Eclipse進(jìn)行斷點(diǎn)調(diào)試的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • SpringBoot2.3.0配置JPA的實(shí)現(xiàn)示例

    SpringBoot2.3.0配置JPA的實(shí)現(xiàn)示例

    這篇文章主要介紹了SpringBoot2.3.0配置JPA的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Java 8新增的方法參數(shù)反射實(shí)例分析

    Java 8新增的方法參數(shù)反射實(shí)例分析

    這篇文章主要介紹了Java 8新增的方法參數(shù)反射,結(jié)合實(shí)例形式分析了java8新增api方法參數(shù)反射相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • 解決idea配置Tomcat Deployment沒有artifact選項(xiàng)的問題

    解決idea配置Tomcat Deployment沒有artifact選項(xiàng)的問題

    今天在配置的時(shí)候tomcat deployment中卻找不到artifact,沒有artifact就不能打成war包上傳到服務(wù)器了,那么怎么解決沒有artifact選項(xiàng)的問題呢,今天通過本文給大家分享idea配置Tomcat Deployment沒有artifact選項(xiàng)的解決方案,一起看看吧
    2023-10-10
  • java list去重操作實(shí)現(xiàn)方式

    java list去重操作實(shí)現(xiàn)方式

    Java中的List是可以包含重復(fù)元素的(hash code 和equals),接下來將介紹兩種方式實(shí)現(xiàn)java list去重操作,感興趣的朋友可以參考下
    2012-12-12
  • hashtable桶數(shù)通常會取一個(gè)素?cái)?shù)分析

    hashtable桶數(shù)通常會取一個(gè)素?cái)?shù)分析

    這篇文章主要介紹了hashtable桶數(shù)通常會取一個(gè)素?cái)?shù)分析的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • java.lang.OutOfMemoryError: Java heap space錯(cuò)誤的問題解決

    java.lang.OutOfMemoryError: Java heap space錯(cuò)誤

    本文主要介紹了java.lang.OutOfMemoryError: Java heap space錯(cuò)誤的問題解決,包括內(nèi)存泄漏、數(shù)據(jù)過大和JVM堆大小配置不足,提供了解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03

最新評論

江源县| 翁牛特旗| 集安市| 新郑市| 航空| 江陵县| 新宾| 临沧市| 玛纳斯县| 黄石市| 达孜县| 偏关县| 湖南省| 宁化县| 贵州省| 湖州市| 浦城县| 池州市| 昂仁县| 文昌市| 永嘉县| 扎囊县| 睢宁县| 灵璧县| 新绛县| 忻城县| 镶黄旗| 宣化县| 合山市| 兰考县| 恩平市| 尼勒克县| 顺昌县| 自贡市| 华容县| 河西区| 鄂温| 建平县| 金山区| 金华市| 万山特区|