欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot加載配置6種方式分析

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

引言

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

說明
Environment對(duì)象Environment 是 springboot 核心的環(huán)境配置接口,它提供了簡單的方法來訪問應(yīng)用程序?qū)傩裕ㄏ到y(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)用程序啟動(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ì)簡單,應(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)文章

  • Java中的StringBuilder()常見方法詳解

    Java中的StringBuilder()常見方法詳解

    StringBuilder是一個(gè)可變的字符序列,此類提供一個(gè)與 StringBuffer 兼容的 API,但不保證同步,這篇文章主要介紹了StringBuilder()常見方法,需要的朋友可以參考下
    2023-09-09
  • SpringBoot項(xiàng)目網(wǎng)頁加載出現(xiàn)Whitelabel?Error?Page的解決

    SpringBoot項(xiàng)目網(wǎng)頁加載出現(xiàn)Whitelabel?Error?Page的解決

    這篇文章主要介紹了SpringBoot項(xiàng)目網(wǎng)頁加載出現(xiàn)Whitelabel?Error?Page的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Java數(shù)組的初始化方法詳解

    Java數(shù)組的初始化方法詳解

    在Java程序開發(fā)中,數(shù)組是一個(gè)非常常用的數(shù)據(jù)類型,數(shù)組的初始化是使用數(shù)組來存儲(chǔ)和處理數(shù)據(jù)的關(guān)鍵步驟之一,但是,關(guān)于Java數(shù)組的初始化,經(jīng)常會(huì)讓人感到迷惑,本文將詳細(xì)介紹Java數(shù)組的初始化方法,幫助讀者從此告別關(guān)于Java數(shù)組初始化的困惑
    2023-11-11
  • 一文詳解Spring Security的基本用法

    一文詳解Spring Security的基本用法

    Spring Security是一個(gè)功能強(qiáng)大且高度可定制的身份驗(yàn)證和訪問控制框架, 提供了完善的認(rèn)證機(jī)制和方法級(jí)的授權(quán)功能。本文將通過一個(gè)簡單的案例了解一下Spring Security的基本用法,需要的可以參考一下
    2022-05-05
  • java中final與finally的使用介紹

    java中final與finally的使用介紹

    本篇文章介紹了,在java中final與finally的使用。需要的朋友參考下
    2013-04-04
  • MyBatis中PageHelper不生效的解決方案

    MyBatis中PageHelper不生效的解決方案

    這篇文章主要介紹了MyBatis中PageHelper不生效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringBoot項(xiàng)目創(chuàng)建單元測(cè)試的流程步驟

    SpringBoot項(xiàng)目創(chuàng)建單元測(cè)試的流程步驟

    在日常開發(fā)的過程中,對(duì)自己的代碼進(jìn)行單元測(cè)試是個(gè)非常重要的過程,一方面可以最小范圍的針對(duì)一個(gè)方法進(jìn)行測(cè)試,提高測(cè)試的簡便性以及測(cè)試的成本,本篇文章主要是為了總結(jié)一下如何優(yōu)雅的在Springboot項(xiàng)目中使用單元測(cè)試去測(cè)試功能,需要的朋友可以參考下
    2024-11-11
  • Java如何將大文件切割成小文件

    Java如何將大文件切割成小文件

    這篇文章主要為大家詳細(xì)介紹了Java如何將大文件切割成小文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Spring實(shí)戰(zhàn)之FileSystemResource加載資源文件示例

    Spring實(shí)戰(zhàn)之FileSystemResource加載資源文件示例

    這篇文章主要介紹了Spring實(shí)戰(zhàn)之FileSystemResource加載資源文件,結(jié)合實(shí)例形式分析了spring FileSystemResource加載xml資源文件的具體實(shí)現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2019-12-12
  • Java?集合框架掌握?Map?和?Set?的使用(內(nèi)含哈希表源碼解讀及面試??碱})

    Java?集合框架掌握?Map?和?Set?的使用(內(nèi)含哈希表源碼解讀及面試??碱})

    這篇文章主要介紹了Java?集合框架掌握?Map?和?Set?的使用并含有內(nèi)含哈希表源碼解讀及面試常考題,?Map?和?Set?是一種適合動(dòng)態(tài)查找的集合容器或者數(shù)據(jù)結(jié)構(gòu)下面文章詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2021-12-12

最新評(píng)論