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

springboot如何獲取yaml/yml(或properties)配置文件信息

 更新時(shí)間:2024年11月04日 11:02:23   作者:YD_1989  
在SpringBoot項(xiàng)目中,讀取配置文件信息是常見(jiàn)需求,可以通過(guò)@Autowired注入Environment類(lèi),使用@Value注解直接注入配置信息,或定義工具類(lèi)結(jié)合ApplicationRunner進(jìn)行高級(jí)配置信息獲取,特別提到

springboot項(xiàng)目獲取配置文件信息

前言

在分布式項(xiàng)目開(kāi)發(fā)中,通常會(huì)使用配置中心(例如:Apollo 配置中心)將配置文件和項(xiàng)目解耦。

為了更具靈活性,有時(shí)候需要把一些數(shù)據(jù)放在配置文件中獲取,能夠減少很多麻煩,這個(gè)時(shí)候就需要讀取配置文件信息。

本文結(jié)合實(shí)際開(kāi)發(fā)介紹幾種使用過(guò)的讀取配置文件的方法。

首先在配置文件中配置一條數(shù)據(jù):

spring.application.name = user-service

1、@Autowired 注入 Environment類(lèi)

和項(xiàng)目中注入 service 或者 mapper 一樣,聲明一個(gè) Environment 類(lèi)變量,加上 @Autowire 注解。

如下:

    @Autowired
    private Environment environment;

該類(lèi)所屬包:

import org.springframework.core.env.Environment;

代碼獲取配置:

String applicationName = environment.getProperty("spring.application.name");

注意:key一定要寫(xiě)完整,有幾層就寫(xiě)幾層,每層的名字用點(diǎn)分隔。

但是,使用該方法具有一定的局限性。

局限性1:使用在靜態(tài)方法中

如果要在靜態(tài)方法中讀取配置信息,不能簡(jiǎn)單的將 Environment 定義成 static 就完了,由于注入機(jī)制,注入一個(gè)靜態(tài)的 bean 只會(huì)得到一個(gè)空的 bean,即變量的值為 null,一旦使用該 bean 對(duì)象就會(huì)報(bào)空指針異常。

錯(cuò)誤使用方法:

    @Autowired
    private static Environment environment;//只定義成靜態(tài)變量,environment 只會(huì)是null
	public static void m1(){
		// 一旦使用environment變量就會(huì)報(bào)空指針異常
		String applicationName = environment.getProperty("spring.application.name");	
	}

正確使用方法:

  1. 將 Environment 定義成 static 靜態(tài)變量
  2. 加上 environment 的 getter/setter 方法
  3. 將@Autowire注解加到set方法上

需要注意的是,只需要 get 方法是靜態(tài)的即可,set 方法不要靜態(tài),否則得到的 environment 還是null。

正確代碼如下:

	private static Environment environment;

    @Autowired
    public void setEnvironment(Environment environment) {
        this.environment = environment;
    }

    public static Environment getEnvironment() {
        return environment;
    }

局限性2:無(wú)法直接讀取自定義的Yml配置文件

Environment 無(wú)法直接讀取自定義的配置文件,需要通過(guò)增加一個(gè)配置類(lèi),將自定義的配置文件暴露到spring environment 中。

解決方法:

定義一個(gè)配置類(lèi),將自定義的配置文件內(nèi)容加載到 Environment 中,代碼如下:

import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Component;

/**
 * 配置類(lèi)
 * @Description 讀取自定義Yml格式配置文件
 */
@Component
public class JdbcConfig {
    @Bean
    public PropertySourcesPlaceholderConfigurer getSqlConfigurer() {
        PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
        YamlPropertiesFactoryBean sqlConfigBean = new YamlPropertiesFactoryBean();
        sqlConfigBean.setResources(new ClassPathResource("jdbc-properties.yml"));
        configurer.setProperties(sqlConfigBean.getObject());
        return configurer;
    }
}

寫(xiě)好配置類(lèi),就可以通過(guò)注解 @Autowired 注入 Environment 類(lèi)來(lái)讀取自定義配置信息了。

2、基礎(chǔ)用法,使用@Value注解直接注入配置信息

使用方式:

@Value(“${xxx.xxx.xxx}”)

代碼如下:

    @Value("${spring.application.name}")
    private String applicationName;

注意:該方法也具有上述局限性。

3、進(jìn)階方法(推薦使用)

定義一個(gè)工具類(lèi),使用 @Component 注解使其成為配置類(lèi),繼承ApplicationRunner 重寫(xiě)run()方法,再注入 Environment 獲取配置,這樣當(dāng)項(xiàng)目啟動(dòng)好之后,配置的信息就已經(jīng)加載完畢,可以做到在任何地方隨時(shí)隨地獲取配置信息。

代碼如下:

配置類(lèi):

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

@Component
public class BaseConfig implements ApplicationRunner {

    @Autowired
    private Environment  environment;

    public static String applicationName;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        applicationName = environment.getProperty("spring.application.name");

    }
}

使用:直接用調(diào)用工具類(lèi)的靜態(tài)屬性即可獲取配置信息。

    @PostMapping(value = "/test/config")
    public List<String> testConfig() {
        List<String> list = new ArrayList<String>();
        list.add(BaseConfig.applicationName);
        return list;
    }

postman 測(cè)試結(jié)果:

拓展:springboot 集成配置中心 - 以 Apollo 為例

微服務(wù)中會(huì)使用配置中心管理配置文件信息,springBoot 通常會(huì)和這些配置中心集成提供一些方法獲取配置信息,本文以 Apollo 配置中心為例展示如何獲取配置信息。

  • (1)添加依賴(lài)
<dependency>
    <groupId>com.ctrip.framework.apollo</groupId>
    <artifactId>red-apollo-client</artifactId>
</dependency>
  • (2)代碼使用
Config config = ConfigService.getAppConfig();// 連接到 ConfigService 的 DEV/SIT/UAT/PROD 等環(huán)境
String applicationName = config.getProperty("spring.application.name", ""); // 獲取配置信息

總結(jié)

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

相關(guān)文章

  • 從原理到實(shí)戰(zhàn)深入理解Java 斷言assert

    從原理到實(shí)戰(zhàn)深入理解Java 斷言assert

    本文深入解析Java斷言機(jī)制,涵蓋語(yǔ)法、工作原理、啟用方式及與異常的區(qū)別,推薦用于開(kāi)發(fā)階段的條件檢查與狀態(tài)驗(yàn)證,并強(qiáng)調(diào)生產(chǎn)環(huán)境應(yīng)使用參數(shù)驗(yàn)證工具類(lèi)替代,附常見(jiàn)問(wèn)題解答及實(shí)踐案例,感興趣的朋友一起看看吧
    2025-06-06
  • Java?8中的Collectors?API介紹

    Java?8中的Collectors?API介紹

    這篇文章主要介紹了Java?8中的Collectors?API,Stream.collect()是Java?8的流API的終端方法之一。它允許我們對(duì)流實(shí)例中保存的數(shù)據(jù)元素執(zhí)行可變折疊操作,下文相關(guān)內(nèi)容需要的小伙伴可以參考一下
    2022-04-04
  • SpringBoot實(shí)現(xiàn)對(duì)超大文件進(jìn)行異步壓縮下載的使用示例

    SpringBoot實(shí)現(xiàn)對(duì)超大文件進(jìn)行異步壓縮下載的使用示例

    在Web應(yīng)用中,文件下載功能是一個(gè)常見(jiàn)的需求,本文介紹了SpringBoot實(shí)現(xiàn)對(duì)超大文件進(jìn)行異步壓縮下載的使用示例,具有一定的參考價(jià)值,感興趣的可以了解一下,
    2023-09-09
  • springboot集成微軟teams的實(shí)例代碼

    springboot集成微軟teams的實(shí)例代碼

    Microsoft Teams 是一款基于聊天的智能團(tuán)隊(duì)協(xié)作工具,可以同步進(jìn)行文檔共享,并為成員提供包括語(yǔ)音、視頻會(huì)議在內(nèi)的即時(shí)通訊工具,今天給大家介紹springboot集成微軟teams的示例代碼,感興趣的朋友一起看看吧
    2022-01-01
  • MyBatis代理Dao方式的增刪改查的實(shí)現(xiàn)小結(jié)

    MyBatis代理Dao方式的增刪改查的實(shí)現(xiàn)小結(jié)

    本文主要介紹了MyBatis代理Dao方式的增刪改查的實(shí)現(xiàn)小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-11-11
  • 如何使用Gradle實(shí)現(xiàn)類(lèi)似Maven的profiles功能

    如何使用Gradle實(shí)現(xiàn)類(lèi)似Maven的profiles功能

    這篇文章主要介紹了如何使用Gradle實(shí)現(xiàn)類(lèi)似Maven的profiles功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • CORS跨域問(wèn)題常用解決方法代碼實(shí)例

    CORS跨域問(wèn)題常用解決方法代碼實(shí)例

    這篇文章主要介紹了CORS跨域問(wèn)題常用解決方法代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • java不同線(xiàn)程解讀以及線(xiàn)程池的使用方式

    java不同線(xiàn)程解讀以及線(xiàn)程池的使用方式

    這篇文章主要介紹了java不同線(xiàn)程解讀以及線(xiàn)程池的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 關(guān)于Openfire集群源碼的分析

    關(guān)于Openfire集群源碼的分析

    這篇文章主要介紹了關(guān)于Openfire集群源碼的分析,內(nèi)容比較詳細(xì),具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-09-09
  • Java實(shí)現(xiàn)畫(huà)圖 給圖片底部添加文字標(biāo)題

    Java實(shí)現(xiàn)畫(huà)圖 給圖片底部添加文字標(biāo)題

    這篇文章主要介紹了Java實(shí)現(xiàn)畫(huà)圖 給圖片底部添加文字標(biāo)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評(píng)論

延长县| 新巴尔虎右旗| 禹州市| 云林县| 济阳县| 特克斯县| 石阡县| 广饶县| 游戏| 孟连| 天祝| 胶州市| 黄梅县| 嘉禾县| 荔浦县| 阿坝县| 微山县| 金山区| 嫩江县| 清苑县| 平谷区| 修文县| 大冶市| 三都| 固原市| 雷波县| 沙洋县| 宽甸| 望谟县| 云南省| 南投县| 弋阳县| 平武县| 奉贤区| 虎林市| 汝州市| 林周县| 改则县| 盐池县| 宜君县| 滨州市|