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

Spring Boot中讀取配置文件的5種方式匯總(最新整理)

 更新時(shí)間:2025年12月15日 09:58:57   作者:她說..  
SpringBoot提供了多種方式讀取配置文件,包括@Value注解、@ConfigurationProperties、Environment接口、原生Properties/yml讀取和@PropertySource加載自定義配置文件,每種方式有其適用場(chǎng)景和優(yōu)缺點(diǎn),本文介紹SpringBoot讀取配置文件5種方式,感興趣的朋友跟隨小編一起看看吧

在 Spring Boot 中,讀取配置文件(如 application.properties/application.yml)的方式豐富且靈活,核心可分為基礎(chǔ)注解式、編程式、類型安全綁定三大類,以下是主流方式的詳細(xì)總結(jié):

一、核心前提:配置文件基礎(chǔ)

Spring Boot 默認(rèn)加載 src/main/resources 下的 application.propertiesapplication.yml,也可通過 spring.config.name/spring.config.location 自定義配置文件路徑。

方式1:@Value 注解(基礎(chǔ)單個(gè)屬性讀?。?/h2>

核心特點(diǎn)

最基礎(chǔ)、輕量的方式,直接綁定單個(gè)配置項(xiàng)到字段/方法參數(shù),支持簡單類型轉(zhuǎn)換、默認(rèn)值、SpEL 表達(dá)式。

使用示例

1. 配置文件(application.yml)

app:
  name: demo-app
  port: 8080
  desc: ${app.name}-${app.port}  # SpEL 拼接

2. 代碼綁定

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class AppConfig {
    // 直接綁定單個(gè)屬性
    @Value("${app.name}")
    private String appName;
    // 綁定并設(shè)置默認(rèn)值(配置不存在時(shí)使用)
    @Value("${app.version:1.0.0}")
    private String appVersion;
    // 綁定 SpEL 拼接的屬性
    @Value("${app.desc}")
    private String appDesc;
}

優(yōu)缺點(diǎn)

  • ? 優(yōu)點(diǎn):簡單易用,適合少量零散配置;
  • ? 缺點(diǎn):不支持復(fù)雜對(duì)象、無類型校驗(yàn)、配置多時(shí)代碼冗余,無法自動(dòng)刷新(需結(jié)合 @RefreshScope)。

方式2:@ConfigurationProperties(類型安全綁定,推薦)

核心特點(diǎn)

將一組相關(guān)配置綁定到 Java 實(shí)體類,支持嵌套對(duì)象、類型校驗(yàn)、前綴分組,是 Spring Boot 推薦的配置綁定方式。

使用步驟

1. 配置文件(application.yml)

app:
  name: demo-app
  port: 8080
  database:
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: 123456
  servers:
    - 192.168.1.1
    - 192.168.1.2

2. 綁定實(shí)體類

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
// 前綴指定配置分組,需配合 @Component 或 @EnableConfigurationProperties 生效
@Component
@ConfigurationProperties(prefix = "app")
public class AppProperties {
    private String name;
    private Integer port;
    private Database database; // 嵌套對(duì)象
    private List<String> servers; // 集合
    // 嵌套類
    public static class Database {
        private String url;
        private String username;
        private String password;
        // getter/setter
    }
    // 必須提供 getter/setter(Spring 反射賦值)
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    // 其他字段的 getter/setter
}

3. 啟用配置(可選)

若實(shí)體類未加 @Component,需在配置類中通過 @EnableConfigurationProperties 啟用:

import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableConfigurationProperties(AppProperties.class)
public class Config {
}

增強(qiáng)特性

  • 支持 JSR-380 校驗(yàn)(加 @Validated + 校驗(yàn)注解):
    @Component
    @ConfigurationProperties(prefix = "app")
    @Validated
    public class AppProperties {
        @NotBlank(message = "應(yīng)用名稱不能為空")
        private String name;
        // ...
    }
  • 支持配置自動(dòng)刷新(結(jié)合 @RefreshScope)。

優(yōu)缺點(diǎn)

  • ? 優(yōu)點(diǎn):類型安全、支持嵌套/集合、配置分組清晰、可校驗(yàn);
  • ? 缺點(diǎn):需編寫實(shí)體類,略繁瑣(但可通過 Lombok 簡化)。

方式3:Environment 接口(編程式讀?。?/h2>

核心特點(diǎn)

Spring 核心環(huán)境接口,可動(dòng)態(tài)讀取所有配置(包括系統(tǒng)屬性、環(huán)境變量、配置文件),支持配置占位符解析。

使用示例

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
@Component
public class EnvConfig {
    @Autowired
    private Environment env;
    public void getConfig() {
        // 讀取單個(gè)配置
        String appName = env.getProperty("app.name");
        // 讀取并指定默認(rèn)值
        Integer appPort = env.getProperty("app.port", Integer.class, 8080);
        // 讀取嵌套配置
        String dbUrl = env.getProperty("app.database.url");
    }
}

擴(kuò)展能力

  • 支持配置文件激活:env.getActiveProfiles()(獲取激活的環(huán)境,如 dev/prod);
  • 支持判斷配置是否存在:env.containsProperty("app.name")

優(yōu)缺點(diǎn)

  • ? 優(yōu)點(diǎn):靈活,支持動(dòng)態(tài)讀取、多環(huán)境適配,無需綁定實(shí)體類;
  • ? 缺點(diǎn):無類型安全(需手動(dòng)轉(zhuǎn)換類型)、零散讀取時(shí)代碼冗余。

方式4:原生 Properties/yml 讀取(手動(dòng)加載)

核心特點(diǎn)

脫離 Spring 容器,手動(dòng)加載配置文件(適合非 Spring 管理的代碼),支持 propertiesyml 格式。

示例1:手動(dòng)讀取 properties 文件

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class ManualPropertiesReader {
    public static void main(String[] args) throws IOException {
        Properties props = new Properties();
        // 加載 classpath 下的配置文件
        try (InputStream is = ManualPropertiesReader.class.getClassLoader().getResourceAsStream("application.properties")) {
            props.load(is);
            String appName = props.getProperty("app.name");
        }
    }
}

示例2:手動(dòng)讀取 yml 文件(需依賴 snakeyaml)

<!-- pom.xml 引入依賴 -->
<dependency>
    <groupId>org.yaml</groupId>
    <artifactId>snakeyaml</artifactId>
</dependency>
import org.yaml.snakeyaml.Yaml;
import java.io.InputStream;
import java.util.Map;
public class ManualYmlReader {
    public static void main(String[] args) {
        Yaml yaml = new Yaml();
        try (InputStream is = ManualYmlReader.class.getClassLoader().getResourceAsStream("application.yml")) {
            Map<String, Object> data = yaml.load(is);
            // 讀取嵌套配置
            Map<String, Object> app = (Map<String, Object>) data.get("app");
            String appName = (String) app.get("name");
        }
    }
}

優(yōu)缺點(diǎn)

  • ? 優(yōu)點(diǎn):完全脫離 Spring,靈活控制加載邏輯;
  • ? 缺點(diǎn):需手動(dòng)處理文件加載、類型轉(zhuǎn)換、嵌套結(jié)構(gòu),無 Spring 自動(dòng)裝配能力。

方式5:@PropertySource 加載自定義配置文件

核心特點(diǎn)

加載非默認(rèn)名稱/路徑的配置文件(如 custom.properties),配合 @Value@ConfigurationProperties 使用。

使用示例

1. 自定義配置文件(custom.properties)

custom.name=my-custom-app
custom.age=20

2. 加載并綁定

import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import org.springframework.beans.factory.annotation.Value;
@Component
// 加載自定義 properties 文件(僅支持 properties,不直接支持 yml)
@PropertySource("classpath:custom.properties")
public class CustomConfig {
    @Value("${custom.name}")
    private String customName;
}

擴(kuò)展:加載 yml 文件(需自定義工廠)

@PropertySource 原生不支持 yml,需自定義 PropertySourceFactory

import org.springframework.core.env.MapPropertySource;
import org.springframework.core.io.support.EncodedResource;
import org.springframework.core.io.support.PropertySourceFactory;
import org.yaml.snakeyaml.Yaml;
import java.util.Map;
public class YmlPropertySourceFactory implements PropertySourceFactory {
    @Override
    public org.springframework.core.env.PropertySource<?> createPropertySource(String name, EncodedResource resource) {
        Yaml yaml = new Yaml();
        Map<String, Object> data = yaml.load(resource.getInputStream());
        return new MapPropertySource(resource.getResource().getFilename(), data);
    }
}

使用:

@PropertySource(value = "classpath:custom.yml", factory = YmlPropertySourceFactory.class)
@Component
public class CustomYmlConfig {
    @Value("${custom.name}")
    private String customName;
}

優(yōu)缺點(diǎn)

  • ? 優(yōu)點(diǎn):支持加載自定義配置文件,補(bǔ)充默認(rèn)配置;
  • ? 缺點(diǎn):原生不支持 yml,需自定義工廠;多文件加載時(shí)需逐個(gè)聲明。

各方式對(duì)比與選型建議

方式類型安全支持嵌套/集合配置分組手動(dòng)加載推薦場(chǎng)景
@Value????少量零散配置、簡單值綁定
@ConfigurationProperties????大量相關(guān)配置、類型安全場(chǎng)景
Environment??(手動(dòng)解析)??動(dòng)態(tài)讀取、多環(huán)境適配、編程式
原生手動(dòng)加載??(手動(dòng)解析)??非 Spring 管理代碼、自定義加載
@PropertySource取決于綁定方式???加載自定義配置文件

選型總結(jié)

  1. 日常開發(fā)優(yōu)先用 @ConfigurationProperties(類型安全、易維護(hù));
  2. 零散簡單配置用 @Value;
  3. 動(dòng)態(tài)讀取/多環(huán)境適配用 Environment
  4. 非 Spring 代碼或自定義加載邏輯用原生手動(dòng)讀??;
  5. 需加載自定義配置文件時(shí)結(jié)合 @PropertySource。

到此這篇關(guān)于Spring Boot中讀取配置文件的5種方式匯總(最新整理)的文章就介紹到這了,更多相關(guān)Spring Boot讀取配置文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java獲取昨天日期字符串的方法

    java獲取昨天日期字符串的方法

    這篇文章主要介紹了java獲取昨天日期字符串的方法,涉及java針對(duì)日期與時(shí)間的運(yùn)算與轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下
    2016-08-08
  • 微信公眾帳號(hào)開發(fā)教程之圖文消息全攻略

    微信公眾帳號(hào)開發(fā)教程之圖文消息全攻略

    本篇主要介紹微信公眾帳號(hào)開發(fā)中圖文消息的使用,以及圖文消息的幾種表現(xiàn)形式。標(biāo)題取名為"圖文消息全攻略",這絕對(duì)不是標(biāo)題黨,是想借此機(jī)會(huì)把大家對(duì)圖文消息相關(guān)的問題、疑慮、障礙全部清除掉。
    2016-12-12
  • 簡單了解Java編程中拋出異常的方法

    簡單了解Java編程中拋出異常的方法

    這篇文章主要介紹了Java編程中拋出異常的方法,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-11
  • Spring MVC項(xiàng)目中l(wèi)og4J和AOP使用詳解

    Spring MVC項(xiàng)目中l(wèi)og4J和AOP使用詳解

    項(xiàng)目日志記錄是項(xiàng)目開發(fā)、運(yùn)營必不可少的內(nèi)容,有了它可以對(duì)系統(tǒng)有整體的把控,出現(xiàn)任何問題都有蹤跡可尋。下面這篇文章主要給大家介紹了關(guān)于Spring MVC項(xiàng)目中l(wèi)og4J和AOP使用的相關(guān)資料,需要的朋友可以參考下。
    2017-12-12
  • 詳解spring security filter的工作原理

    詳解spring security filter的工作原理

    這篇文章主要介紹了詳解spring security filter的工作原理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • IntelliJ?IDEA?2022.2?正式發(fā)布新功能體驗(yàn)

    IntelliJ?IDEA?2022.2?正式發(fā)布新功能體驗(yàn)

    IntelliJ?IDEA?2022.2為遠(yuǎn)程開發(fā)功能帶來了多項(xiàng)質(zhì)量改進(jìn),使其更美觀、更穩(wěn)定,新版本還具有多項(xiàng)值得注意的升級(jí)和改進(jìn),下面跟隨小編一起看看IDEA?2022.2新版本吧
    2022-08-08
  • JAVA線程sleep()和wait()詳解及實(shí)例

    JAVA線程sleep()和wait()詳解及實(shí)例

    這篇文章主要介紹了JAVA線程sleep()和wait()詳解及實(shí)例的相關(guān)資料,探討一下sleep()和wait()方法的區(qū)別和實(shí)現(xiàn)機(jī)制,需要的朋友可以參考下
    2017-05-05
  • 一文帶你搞定SpringBoot Log4j2日志配置文件

    一文帶你搞定SpringBoot Log4j2日志配置文件

    在項(xiàng)目推進(jìn)中,如果說第一件事是搭建 Spring 框架的話,那么第二件事情就是在 Sring 基礎(chǔ)上搭建日志框架,本文我們就來學(xué)習(xí)一下SpringBoot如何通過Log4j2配置日志吧
    2025-04-04
  • SpringBoot自定義RestTemplate的攔截器鏈的實(shí)戰(zhàn)指南

    SpringBoot自定義RestTemplate的攔截器鏈的實(shí)戰(zhàn)指南

    在項(xiàng)目開發(fā)中,RestTemplate作為Spring提供的HTTP客戶端工具,經(jīng)常用于訪問內(nèi)部或三方服務(wù),但在實(shí)際項(xiàng)目中,我們往往需要對(duì)請(qǐng)求進(jìn)行統(tǒng)一處理,所以本文給大家介紹了SpringBoot自定義RestTemplate的攔截器鏈的實(shí)戰(zhàn)指南,需要的朋友可以參考下
    2025-07-07
  • Java中的setting和getting使用方法

    Java中的setting和getting使用方法

    為了保障數(shù)據(jù)的安全性,通常將數(shù)據(jù)成員定義為private(封裝或私有化),這樣外部代碼就無法直接訪問這些數(shù)據(jù),只能通過類提供的公共方法來進(jìn)行訪問,這種方法主要包括setter和getter方法,以及構(gòu)造方法,setter方法用于給私有屬性賦值
    2024-09-09

最新評(píng)論

左权县| 延津县| 临邑县| 福泉市| 望城县| 瑞丽市| 河曲县| 嘉荫县| 肥城市| 墨玉县| 桃江县| 广元市| 柞水县| 城步| 五河县| 得荣县| 剑川县| 鹿泉市| 慈溪市| 阿尔山市| 安阳市| 金华市| 天镇县| 启东市| 晋州市| 大英县| 阜南县| 永清县| 曲阳县| 昆明市| 河源市| 锡林郭勒盟| 高尔夫| 石河子市| 霍林郭勒市| 堆龙德庆县| 普安县| 黔江区| 双城市| 平塘县| 延边|