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

SpringBoot讀取配置文件的四種方式

 更新時(shí)間:2024年08月21日 09:59:07   作者:@趙士杰  
在 Spring Boot 中,application.yml 文件用于配置應(yīng)用程序的屬性,Spring Boot 默認(rèn)會(huì)從 src/main/resources 目錄下的 application.properties 或 application.yml 文件中讀取配置,本文介紹了SpringBoot讀取配置文件的四種方式,需要的朋友可以參考下

引言

在 Spring Boot 中,application.yml 文件用于配置應(yīng)用程序的屬性,Spring Boot 默認(rèn)會(huì)從 src/main/resources 目錄下的 application.properties 或 application.yml 文件中讀取配置。讀取 application.yml 文件中的配置可以通過(guò)以下幾種常用的方法進(jìn)行:

  1. @Value: 適合讀取簡(jiǎn)單的單一屬性。
  2. @ConfigurationProperties: 適合讀取復(fù)雜的配置集。
  3. Environment: 適合在運(yùn)行時(shí)動(dòng)態(tài)訪問(wèn)配置。
  4. @PropertySource: 加載 .properties 文件。

1. @Value 注解讀取單個(gè)屬性

@Value 注解用于讀取單一簡(jiǎn)單的配置屬性,該注解可以直接應(yīng)用于字段、構(gòu)造函數(shù)或方法參數(shù)上,不要求提供 Setter 方法。

  1. 在 application.yml 配置文件中添加如下配置:

app:
  name: MyApp
  keys:
    - key1
    - key2

使用 @Value 注解從配置文件中讀取單個(gè)屬性值:

  • 字段注入:將 @Value 注解應(yīng)用于字段,Spring 將直接將配置值注入到字段中。
@Component
public class MyComponent {

    @Value("${app.name}")
    private String name;

}
  • 構(gòu)造函數(shù)注入@Value 也可以用于構(gòu)造函數(shù)參數(shù)。
@Component
public class MyComponent {

    private final String name;

    public MyComponent(@Value("${app.name}") String name) {
        this.name = name;
    }

}
  • 方法參數(shù)注入@Value 注解用于方法參數(shù)。
@Component
public class MyComponent {

    private String name;

    @Value("${app.name}")
    public void setKeys(String name) {
        this.name = name;
    }

}

注意:@Value 注解無(wú)法處理復(fù)雜的配置,如集合,如下處理會(huì)在應(yīng)用啟動(dòng)時(shí)拋出 IllegalArgumentException 異常:Could not resolve placeholder 'app.keys' in value "${app.keys}"

@Value("${app.keys}")
private List<String> keys;

2. 使用 @ConfigurationProperties 注解

@ConfigurationProperties 用于將配置文件中的屬性綁定到 Java 對(duì)象中。適合處理結(jié)構(gòu)化的配置,比如嵌套的屬性或復(fù)雜的屬性集合。

  • 在 application.yml 配置文件中添加如下配置:
app:
  name: MyApp
  keys:
    - key1
    - key2

在類上使用 @ConfigurationProperties 注解,并指定前綴,該類會(huì)直接映射配置文件中的屬性名一致屬性:

@Component
@ConfigurationProperties(prefix = "app")
public class AppProperties {

    private List<String> keys;

}

注意:@ConfigurationProperties 讀取配置時(shí)需要確保配置文件中的屬性名與 Java 類中的屬性名匹配。

3. 通過(guò) Environment 對(duì)象讀取屬性

Environment 是 Spring 中用于管理和訪問(wèn)配置屬性、配置文件和環(huán)境變量的一個(gè)抽象接口,該對(duì)象提供了一種管理和訪問(wèn)配置屬性、激活的配置文件和環(huán)境變量的統(tǒng)一方式。我們可以在任何 Spring 管理的 bean 中通過(guò)注入 Environment 對(duì)象來(lái)獲取配置屬性。

  • 在 application.yml 配置文件中添加如下配置:
app:
  name: MyApp
  keys:
    - key1
    - key2
  • 在類中注入 Environment 對(duì)象,使用env.getProperty(String key)來(lái)檢索屬性的值。
@Component
public class MyComponent {

    @Autowired
    private Environment env;

    public void printConfig() {
        String port = env.getProperty("server.port");
        System.out.println("Server Port: " + port);
    }
}

注意:Environment 在加載 YML 配置文件時(shí),會(huì)將每個(gè)元素視為單獨(dú)的鍵。

即 application.yml 文件中的配置:

yamlCopy Codeapp:
  keys:
    - key1
    - key2
    - key3

在 Environment 中,將被處理為:

  • app.keys[0] 對(duì)應(yīng) key1
  • app.keys[1] 對(duì)應(yīng) key2
  • app.keys[2] 對(duì)應(yīng) key3

因此對(duì)于復(fù)雜配置需要特殊處理,例如獲取集合元素需要使用類似數(shù)組索引的語(yǔ)法來(lái)訪問(wèn) YAML 文件中的列表元素。

4. 使用 @PropertySource 注解加載額外的配置文件

@PropertySource 注解是 Spring Framework 提供的一個(gè)注解,用于加載額外 .properties 配置文件或其他資源文件中的屬性到 Spring 的 Environment 中。

在 src/main/resources 目錄下創(chuàng)建 config.properties 的屬性文件:

app.name=MyApp
app.version=1.0.0

在配置類上使用 @PropertySource 注解來(lái)加載配置文件:

@Configuration
@PropertySource("classpath:config.properties")
//@PropertySource({"classpath:config.properties", "classpath:another-config.properties"})
public class AppConfig {
    
}

使用 @Value 注解或 Environment 對(duì)象獲取屬性:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class MyComponent {

    @Value("${app.name}")
    private String appName;

    @Autowired
    private Environment env;

    public void printAppInfo() {
        System.out.println("App Name: " + appName);
        String appVersion = env.getProperty("app.version");
        System.out.println("App Version: " + appVersion);
    }
}

注意: 如果需要加載多個(gè)屬性文件,可以在 @PropertySource 注解中使用 value 屬性指定多個(gè)文件路徑:

@PropertySource({"classpath:config.properties", "classpath:another-config.properties"})
  • 路徑:classpath: 前綴表示文件在類路徑中。如果文件位于文件系統(tǒng)的其他位置,你可以使用文件系統(tǒng)路徑,例如 file:/path/to/config.properties。
  • 覆蓋:@PropertySource 加載的屬性文件中的屬性會(huì)覆蓋同名的系統(tǒng)屬性,但不會(huì)覆蓋由 Spring Boot 的 application.properties 或 application.yml 文件中定義的屬性。
  • 順序:如果多個(gè)屬性文件定義了同一個(gè)屬性,后加載的文件中的屬性值會(huì)覆蓋先加載的文件中的值。

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

相關(guān)文章

最新評(píng)論

万源市| 金华市| 伊川县| 和顺县| 合水县| 尖扎县| 安顺市| 平度市| 射阳县| 若尔盖县| 顺昌县| 清水河县| 揭西县| 石楼县| 茂名市| 法库县| 枣强县| 深泽县| 建瓯市| 桂林市| 郑州市| 长沙市| 垦利县| 永泰县| 齐齐哈尔市| 花垣县| 武陟县| 招远市| 大同县| 寿宁县| 木兰县| 安国市| 花垣县| 昌黎县| 台安县| 沿河| 舞阳县| 合川市| 冷水江市| 堆龙德庆县| 丰城市|