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

SpringBoot加載配置6種方式分析

 更新時(shí)間:2023年10月30日 11:46:34   作者:京東零售?馬宏偉  
這篇文章主要介紹了SpringBoot加載配置6種方式分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

從配置文件中獲取屬性應(yīng)該是SpringBoot開發(fā)中最為常用的功能之一,但就是這么常用的功能,仍然有很多開發(fā)者抓狂~今天帶大家簡(jiǎn)單回顧一下這六種的使用方式:

說明
Environment對(duì)象Environment 是 springboot 核心的環(huán)境配置接口,它提供了簡(jiǎn)單的方法來訪問應(yīng)用程序?qū)傩?,包括系統(tǒng)屬性、操作系統(tǒng)環(huán)境變量、命令行參數(shù)、和應(yīng)用程序配置文件中定義的屬性等等,使用 Environment 方式來獲取配置屬性值非常簡(jiǎn)單,只要注入Environment類調(diào)用其方法**getProperty(屬性key)**即可
@Value@Value注解是Spring框架提供的用于注入配置屬性值的注解,它可用于類的成員變量、方法參數(shù)和構(gòu)造函數(shù)參數(shù)上, 在應(yīng)用程序啟動(dòng)時(shí),使用 @Value 注解的 Bean 會(huì)被實(shí)例化。所有使用了 @Value 注解的 Bean 會(huì)被加入到 PropertySourcesPlaceholderConfigurer 的后置處理器集合中。當(dāng)后置處理器開始執(zhí)行時(shí),它會(huì)讀取 Bean 中所有 @Value 注解所標(biāo)注的值,并通過反射將解析后的屬性值賦值給標(biāo)有 @Value 注解的成員變量、方法參數(shù)和構(gòu)造函數(shù)參數(shù)。重要?。?! ??注意 ①在使用 @Value 注解時(shí)需要確保注入的屬性值已經(jīng)加載到 Spring 容器中,否則會(huì)導(dǎo)致注入失?。?②建議引用變量的時(shí)候給定一個(gè)默認(rèn)值,避免啟動(dòng)報(bào)“缺失配置”的錯(cuò)誤; ③通過依賴注入的方式獲取對(duì)象中屬性值,切記不要使用new的方式來創(chuàng)建對(duì)象獲取其屬性。
@ConfigurationPropertiesSpringBoot 提供的一種更加便捷來處理配置文件中的屬性值的方式,可以通過自動(dòng)綁定和類型轉(zhuǎn)換等機(jī)制,將指定前綴的屬性集合自動(dòng)綁定到一個(gè)Bean對(duì)象上。
@PropertySources@PropertySources 注解的實(shí)現(xiàn)原理相對(duì)簡(jiǎn)單,應(yīng)用程序啟動(dòng)時(shí)掃描所有被該注解標(biāo)注的類,獲取到注解中指定自定義配置文件的路徑,將指定路徑下的配置文件內(nèi)容加載到 Environment 中,這樣可以通過 @Value 注解或 Environment.getProperty() 方法來獲取其中定義的屬性值了。默認(rèn)只限讀取properties文件內(nèi)容,想加載yaml文件內(nèi)容,可以自定義factory適配器,指定factory具體的使用
YamlPropertiesFactoryBean對(duì)象只限讀取yaml文件,通過 @Value 注解或 Environment.getProperty() 方法來配合著獲取其中定義的屬性值。
JAVA原生通過java.util.Properties去加載配置文件中的屬性。

一、Environment

注入Environment類調(diào)用其方法getProperty(屬性key)即可

@Slf4j
@SpringBootTest
public class EnvironmentTest {
    @Resource
    private Environment env;
    @Test
    public void var1Test() {
        String var1 = env.getProperty("env.var1");
        log.info("Environment獲取的配置內(nèi)容:{}", var1);
    }
}

二、@Value 注解

只要在變量上加注解 @Value("${env.var1}")就可以了,@Value 注解會(huì)自動(dòng)將配置文件中的env.var1屬性值注入到var1字段中。

@Slf4j
@SpringBootTest
public class EnvVariablesTest {
    @Value("${env.var1}")
    private String var1;
    @Test
    public void var1Test(){
        log.info("配置文件屬性: {}",var1);
    }
}

三、@ConfigurationProperties 注解

在 application.yml 配置文件中添加配置項(xiàng):

env:
  var1: 變量值1
  var2: 變量值2

創(chuàng)建一個(gè) MyConf 類用于承載所有前綴為env的配置屬性。

@Data
@Configuration
@ConfigurationProperties(prefix = "env")
public class MyConf {
    private String var1;
    private String var2;
}

在需要使用var1、var2屬性值的地方,將 MyConf 對(duì)象注入到依賴對(duì)象中即可。

@Slf4j
@SpringBootTest
public class ConfTest {
    @Resource
    private MyConf myConf;
    @Test
    public void myConfTest() {
        log.info("@ConfigurationProperties注解獲取的配置內(nèi)容:{}", JSON.toJSONString(myConf));
    }
}

四、@PropertySources 注解

在 src/main/resources/ 目錄下創(chuàng)建自定義配置文件 important.properties,增加兩個(gè)屬性。

env.var1=變量值1
env.var2=變量值2

在需要使用自定義配置文件的類上添加 @PropertySources 注解,注解 value屬性中指定自定義配置文件的路徑,可以指定多個(gè)路徑,用逗號(hào)隔開。

@Data
@Configuration
@PropertySources({
        @PropertySource(value = "classpath:important.properties", encoding = "utf-8"),
        @PropertySource(value = "classpath:important.properties",encoding = "utf-8")
})
public class PropertySourcesConf {
    @Value("${env.var1}")
    private String var1;
    @Value("${env.var2}")
    private String var2;
}

五、YamlPropertiesFactoryBean 加載 YAML 文件

@Configuration
public class MyYamlConfig {
    @Bean
    public static PropertySourcesPlaceholderConfigurer yamlConfigurer() {
        PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
        YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
        yaml.setResources(new ClassPathResource("test.yml"));
        configurer.setProperties(Objects.requireNonNull(yaml.getObject()));
        return configurer;
    }
}

可以通過 @Value 注解或 Environment.getProperty() 方法來獲取其中定義的屬性值。

@Slf4j
@SpringBootTest
public class YamlTest {
    @Value("${env.var3}")
    private String var3;
    @Test
    public void  myYamlTest() {
        log.info("Yaml獲取配置內(nèi)容:{}", var3);
    }
}

六、JAVA原生讀取

@Slf4j
@SpringBootTest
public class CustomTest {
    @Test
    public void customTest() {
        Properties props = new Properties();
        try {
            InputStreamReader inputStreamReader = new InputStreamReader(
                    this.getClass().getClassLoader().getResourceAsStream("test.properties"),
                    StandardCharsets.UTF_8);
            props.load(inputStreamReader);
        } catch (IOException e1) {
            System.out.println(e1);
        }
        log.info("Properties Name:" + props.getProperty("env.appName"));
    }
}

以上就是SpringBoot加載配置6種方式分析的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot加載配置的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MyBatis詳細(xì)執(zhí)行流程的全紀(jì)錄

    MyBatis詳細(xì)執(zhí)行流程的全紀(jì)錄

    這篇文章主要給大家介紹了關(guān)于MyBatis詳細(xì)執(zhí)行流程的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • SpringRunner和SpringJUnit4ClassRunner區(qū)別小結(jié)

    SpringRunner和SpringJUnit4ClassRunner區(qū)別小結(jié)

    SpringRunner 和 SpringJUnit4ClassRunner 是用于在JUnit測(cè)試中與Spring測(cè)試框架集成的兩個(gè)類,本文主要介紹了SpringRunner和SpringJUnit4ClassRunner區(qū)別小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-10-10
  • Java定時(shí)任務(wù)Schedule的基本用法及Cron表達(dá)式實(shí)踐記錄

    Java定時(shí)任務(wù)Schedule的基本用法及Cron表達(dá)式實(shí)踐記錄

    本文介紹了Spring框架提供的@Scheduled注解和cron表達(dá)式在Java定時(shí)任務(wù)中的應(yīng)用,詳細(xì)講解了基礎(chǔ)配置、Cron表達(dá)式解析以及進(jìn)階用法和注意事項(xiàng),感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • Spring WebFlux之響應(yīng)式編程詳解

    Spring WebFlux之響應(yīng)式編程詳解

    這篇文章主要介紹了Spring WebFlux之響應(yīng)式編程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Java中利用BitMap位圖實(shí)現(xiàn)海量級(jí)數(shù)據(jù)去重

    Java中利用BitMap位圖實(shí)現(xiàn)海量級(jí)數(shù)據(jù)去重

    有許多方法可以用來去重,比如使用列表、集合等等,但這些方法通常只適用于一般情況,然而,當(dāng)涉及到大量數(shù)據(jù)去重時(shí),常見的 Java Set、List,甚至是 Java 8 的新特性 Stream 流等方式就顯得不太合適了,本文給大家介紹了Java中利用BitMap位圖實(shí)現(xiàn)海量級(jí)數(shù)據(jù)去重
    2024-04-04
  • Java中關(guān)于優(yōu)先隊(duì)列PriorityQueue的使用及相關(guān)方法

    Java中關(guān)于優(yōu)先隊(duì)列PriorityQueue的使用及相關(guān)方法

    這篇文章主要介紹了Java中關(guān)于優(yōu)先隊(duì)列PriorityQueue的使用及相關(guān)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • SpringBoot結(jié)合FreeMarker視圖渲染的實(shí)現(xiàn)

    SpringBoot結(jié)合FreeMarker視圖渲染的實(shí)現(xiàn)

    FreeMarker它允許開發(fā)人員使用模板和數(shù)據(jù)來生成輸出文本,如HTML網(wǎng)頁、電子郵件、配置文件和源代碼等,本文主要介紹了SpringBoot結(jié)合FreeMarker視圖渲染的實(shí)現(xiàn),感興趣的可以了解一下
    2024-03-03
  • 解析Java的JVM以及類與對(duì)象的概念

    解析Java的JVM以及類與對(duì)象的概念

    這篇文章主要介紹了解析Java的JVM以及類與對(duì)象的概念,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • mybatis-xml映射文件及mybatis動(dòng)態(tài)sql詳解

    mybatis-xml映射文件及mybatis動(dòng)態(tài)sql詳解

    XML映射文件的名稱與Mapper接口名稱一致,并且將XML映射文件和Mapper接口放置在相同包下(同包同名),這篇文章主要介紹了mybatis-xml映射文件及mybatis動(dòng)態(tài)sql的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • springboot中如何通過main方法調(diào)用service或dao

    springboot中如何通過main方法調(diào)用service或dao

    這篇文章主要介紹了springboot中如何通過main方法調(diào)用service或dao,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02

最新評(píng)論

饶阳县| 寿阳县| 田林县| 芷江| 文昌市| 建阳市| 教育| 上蔡县| 阜康市| 穆棱市| 吴川市| 基隆市| 乐昌市| 博罗县| 旬阳县| 凌源市| 金湖县| 宜都市| 张家界市| 页游| 莲花县| 大英县| 天全县| 宝鸡市| 藁城市| 农安县| 长宁区| 罗源县| 耒阳市| 洞口县| 江都市| 丽水市| 汤原县| 宣汉县| 旌德县| 拉孜县| 岳池县| 石景山区| 华亭县| 通江县| 绥中县|