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

SpringBoot加載配置6種方式分析

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

引言

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

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

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

三、@ConfigurationProperties 注解

在 application.yml 配置文件中添加配置項:

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

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

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

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

@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,增加兩個屬性。

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

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

@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種方式分析的詳細內(nèi)容,更多關(guān)于SpringBoot加載配置的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    解析Java的JVM以及類與對象的概念

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

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

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

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

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

最新評論

宁都县| 阜新市| 吴江市| 通海县| 固原市| 当涂县| 铁岭市| 太谷县| 唐山市| 铁岭县| 玉田县| 丹阳市| 华坪县| 清丰县| 乌什县| 上饶市| 高平市| 金平| 隆回县| 嘉定区| 商城县| 屯门区| 乌兰浩特市| 桐柏县| 隆子县| 无棣县| 衡阳县| 永春县| 南昌县| 白河县| 普洱| 汕尾市| 漳浦县| 米脂县| 新津县| 嘉定区| 察雅县| 务川| 醴陵市| 张北县| 九龙坡区|