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

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

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

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

背景

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

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

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

總結(jié)3步走

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

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

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

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)?,分別為資源名稱和資源對(duì)象,這是第一步
    public PropertySource< ? > createPropertySource(String name, EncodedResource resource) throws IOException {
    
    	//這是第二步,根據(jù)流對(duì)象產(chǎn)出Properties對(duì)象
        Properties propertiesFromYaml = loadYamlIntoProperties(resource);
        String sourceName = name != null ? name : resource.getResource().getFilename();
        assert sourceName != null;
        
        //這是第三部,根據(jù)Properties對(duì)象,產(chǎn)出PropertySource對(duì)象,放入到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)建咱們是說(shuō)完了,小伙伴有很多問(wèn)號(hào),怎么去使用呢?

接下來(lái)我們?cè)倏纯悼担?/strong>

在任意一個(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)文章

  • 詳解JavaSE實(shí)現(xiàn)IoC

    詳解JavaSE實(shí)現(xiàn)IoC

    簡(jiǎn)單地說(shuō),IoC 是反轉(zhuǎn)控制,類似于好萊塢原則,主要有依賴查找和依賴注入實(shí)現(xiàn)。依賴查找是主動(dòng)或手動(dòng)的依賴查找方式,通常需要依賴容器或標(biāo)準(zhǔn)API實(shí)現(xiàn)。 而依賴注入則是手動(dòng)或自動(dòng)依賴綁定的方式,無(wú)需依賴特定的容器和API。本文將詳細(xì)介紹JavaSE實(shí)現(xiàn)IoC。
    2021-06-06
  • java IO流之轉(zhuǎn)換流的具體使用

    java IO流之轉(zhuǎn)換流的具體使用

    轉(zhuǎn)換流可以將一個(gè)字節(jié)流包裝成字符流,或者將一個(gè)字符流包裝成字節(jié)流,本文主要介紹了java IO流之轉(zhuǎn)換流的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • Spring Boot通過(guò)Junit實(shí)現(xiàn)單元測(cè)試過(guò)程解析

    Spring Boot通過(guò)Junit實(shí)現(xiàn)單元測(cè)試過(guò)程解析

    這篇文章主要介紹了Spring Boot通過(guò)Junit實(shí)現(xiàn)單元測(cè)試過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • C# TreeNode案例詳解

    C# TreeNode案例詳解

    這篇文章主要介紹了C# TreeNode案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Mybatis中 SQL語(yǔ)句復(fù)用

    Mybatis中 SQL語(yǔ)句復(fù)用

    這篇文章主要介紹了Mybatis中 SQL語(yǔ)句復(fù)用,需要的朋友可以參考下
    2017-03-03
  • SpringBoot(十)之郵件服務(wù)

    SpringBoot(十)之郵件服務(wù)

    這篇文章給大家介紹了SpringBoot郵件服務(wù)的相關(guān)知識(shí),此文是使用springboot最新版本1.5.3進(jìn)行開(kāi)發(fā)的。本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的的朋友參考下吧
    2017-05-05
  • Java類加載器ClassLoader的使用詳解

    Java類加載器ClassLoader的使用詳解

    類加載器負(fù)責(zé)讀取Java字節(jié)代碼,并轉(zhuǎn)換成java.lang.Class類的一個(gè)實(shí)例的代碼模塊。本文主要和大家聊聊JVM類加載器ClassLoader的使用,需要的可以了解一下
    2022-12-12
  • 深入理解Spring Boot屬性配置文件

    深入理解Spring Boot屬性配置文件

    這篇文章主要給大家深入的介紹了關(guān)于Spring Boot屬性配置文件的相關(guān)資料,文中介紹的很詳細(xì),相信對(duì)大家具有一定的參考借鑒價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-02-02
  • Spring Boot配置讀取實(shí)現(xiàn)方法解析

    Spring Boot配置讀取實(shí)現(xiàn)方法解析

    這篇文章主要介紹了Spring Boot配置讀取實(shí)現(xiàn)方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • github上的java項(xiàng)目怎么運(yùn)行(面向小白)

    github上的java項(xiàng)目怎么運(yùn)行(面向小白)

    這篇文章主要介紹了github上的java項(xiàng)目怎么運(yùn)行(面向小白),今天從github把我以前寫的一個(gè)小demo下載下來(lái)了,第一次下載項(xiàng)目,摸索了一個(gè)多小時(shí),才運(yùn)行起來(lái),需要的朋友可以參考下
    2019-06-06

最新評(píng)論