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

Spring?Boot讀取配置文件的五種方式小結

 更新時間:2025年04月25日 10:50:33   作者:頗有幾分姿色  
Spring?Boot?提供了靈活多樣的方式來讀取配置文件,這篇文章為大家介紹了5種常見的讀取方式,文中的示例代碼簡潔易懂,大家可以根據(jù)自己的需要進行選擇

Spring Boot 提供了靈活多樣的方式來讀取配置文件(如 application.yml 或 application.properties),本文介紹幾種常見的讀取方式。

1. 配置文件位置與加載順序

Spring Boot 默認從以下位置加載配置文件(優(yōu)先級從高到低):

命令行參數(shù)(如:--server.port=8081)

application.properties / application.yml(位于 classpath:/config/)

classpath:/application.properties 或 application.yml

外部配置中心(如 Nacos、Spring Cloud Config)

2. 讀取配置文件的方式匯總

Spring Boot 提供了多種讀取配置文件的方式。

方式一:使用 @Value 注解讀取配置

這種方式適合讀取單個簡單配置項??梢杂脕碜⑷肱渲梦募械闹?,也可以指定默認值,防止配置項缺失時拋出異常 。

配置文件:

app:
  name: order-v
  version: v1

示例代碼:

@Component
public class AppProperties {

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

    @Value("${app.version:v1.0.0}")
    private String version;

    public void print() {
        System.out.println("App Name: " + name);
        System.out.println("App Version: " + version);
    }
}
  • : 后面就是默認值
  • 當配置文件中沒有對應的值時,會使用默認值
  • 如果配置項存在對應的值,默認值不生效

測試代碼:

@RestController
@RequestMapping("/test")
@AllArgsConstructor
public class TestController {

    private final AppProperties appProperties;

    @RequestMapping("/print")
    public void print() {
        appProperties.print();
    }
}

? 優(yōu)點:

簡單直接,適用于讀取單個變量

? 缺點:

不支持嵌套結構、不支持批量綁定、不利于維護

方式二:使用 @ConfigurationProperties 自動綁定配置類(推薦)

適合綁定多個字段、嵌套結構、List、Map等復雜配置。

配置文件:

app:
  name: order-v
  version: v1
  servers:
    - http://dev-server:8080
    - http://test-server:8081
    - http://prod-server:8082
  metadata:
    author: Alice
    version: 1.0.2
    website: https://emp.com
  modules:
    user:
      enabled: true
      path: /user
    admin:
      enabled: false
      path: /admin

配置類示例代碼:

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

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

    private String name;

    // List 示例
    private List<String> servers;

    // Map<String, String> 示例
    private Map<String, String> metadata;

    // Map<String, 自定義對象> 示例
    private Map<String, Module> modules;

    @Data
    public static class Module {
        private boolean enabled;
        private String path;
    }
    
    public void print() {
        System.out.println("name: " + name);
        System.out.println("servers: " + servers);
        System.out.println("metadata: " + metadata);
        System.out.println("modules: " + modules);
    }
}

使用示例:

import com.example.xiaoshitou.config.AppConfigProperties;
import com.example.xiaoshitou.config.AppProperties;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
@RequestMapping("/test")
@AllArgsConstructor
public class TestController {

    private final AppProperties appProperties;
    private final AppConfigProperties appConfigProperties;

    @RequestMapping("/print")
    public void print() {
        appProperties.print();
    }

    @RequestMapping("/printConfig")
    public void printConfig() {
        appConfigProperties.print();
    }
}

? 優(yōu)點:

  • 支持對象結構、嵌套對象、List、Map
  • 支持校驗(配合 @Validated)
  • 強類型綁定,IDE 支持友好

? 缺點:

需要額外的類定義

方式三:使用 Environment 編程式讀取配置

適合動態(tài)讀取、條件判斷場景。

示例代碼:

import com.example.xiaoshitou.config.AppConfigProperties;
import com.example.xiaoshitou.config.AppProperties;
import com.example.xiaoshitou.config.SmsConfig;
import lombok.AllArgsConstructor;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/***
 * @title
 * @author shijiangyong
 * @date 2025/4/24 17:28
 **/
@RestController
@RequestMapping("/test")
@AllArgsConstructor
public class TestController {

    private final AppProperties appProperties;
    private final AppConfigProperties appConfigProperties;
    private final Environment env;

    @RequestMapping("/print")
    public void print() {
        appProperties.print();
    }

    @RequestMapping("/printConfig")
    public void printConfig() {
        appConfigProperties.print();
    }

    @RequestMapping("/printEnv")
    public void printEnv() {
        String name = env.getProperty("app.name");
        System.out.println("app.name = " + name);
    }

}

? 優(yōu)點:

  • 動態(tài)、靈活,支持條件判斷
  • 可用于第三方庫或工具類中

? 缺點:

可讀性差,不支持自動綁定

方式四:加載自定義配置文件(@PropertySource)

當你需要讀取非 application.yml 的配置文件時使用。

自定義配置文件 sms-config.properties:

sms.sign=aliyun
sms.template.code=TPL001

示例代碼:

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

/***
 * @title
 * @author shijiangyong
 * @date 2025/4/25 10:08
 **/
@Configuration
@PropertySource("classpath:sms-config.properties")
@ConfigurationProperties(prefix = "sms")
@Data
public class SmsConfig {
    private String sign;
    private Template template;

    @Data
    public static class Template {
        private String code;
    }

    public void print() {
        System.out.println("sign : " + sign);
        System.out.println("template.code : " + template.getCode());
    }
}

使用示例:

import com.example.xiaoshitou.config.AppConfigProperties;
import com.example.xiaoshitou.config.AppProperties;
import com.example.xiaoshitou.config.SmsConfig;
import lombok.AllArgsConstructor;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/***
 * @title
 * @author shijiangyong
 * @date 2025/4/24 17:28
 **/
@RestController
@RequestMapping("/test")
@AllArgsConstructor
public class TestController {

    private final AppProperties appProperties;
    private final AppConfigProperties appConfigProperties;
    private final SmsConfig smsConfig;
    private final Environment env;

    @RequestMapping("/print")
    public void print() {
        appProperties.print();
    }

    @RequestMapping("/printConfig")
    public void printConfig() {
        appConfigProperties.print();
    }

    @RequestMapping("/printEnv")
    public void printEnv() {
        String name = env.getProperty("app.name");
        System.out.println("app.name = " + name);
    }


    @RequestMapping("/smsConfig")
    public void smsConfig() {
        smsConfig.print();
    }

}

? 優(yōu)點:

  • 支持加載自定義配置文件
  • 可與 @ConfigurationProperties 搭配使用

? 缺點:

  • 不支持 .yml 格式
  • 不支持動態(tài)刷新

方式五:多環(huán)境配置(多 Profile)

適用于開發(fā)、測試、生產(chǎn)環(huán)境的配置隔離。

配置文件:

# application-dev.yml
app:
  name: DevApp

# application-prod.yml
app:
  name: ProdApp

激活方式:

在 application.yml 中設置:

spring:
  profiles:
    active: dev

或通過啟動參數(shù):

--spring.profiles.active=prod

? 優(yōu)點:

  • 多環(huán)境隔離,配置清晰
  • 支持組合激活多個 profile

總結

場景推薦方式
讀取單個簡單值@Value
讀取嵌套結構、對象@ConfigurationProperties
動態(tài)讀取Environment
非默認配置文件@PropertySource
多環(huán)境支持多 profile

以上就是Spring Boot讀取配置文件的五種方式小結的詳細內(nèi)容,更多關于Spring Boot讀取配置文件的資料請關注腳本之家其它相關文章!

相關文章

  • Spring Boot之過濾器 Filter注入的方式解析

    Spring Boot之過濾器 Filter注入的方式解析

    這篇文章主要介紹了Spring Boot之過濾器 Filter注入的方式解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • springboot使用國產(chǎn)加密算法方式,sm2和sm3加解密demo

    springboot使用國產(chǎn)加密算法方式,sm2和sm3加解密demo

    這篇文章主要介紹了springboot使用國產(chǎn)加密算法方式,sm2和sm3加解密demo,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Spring Boot MyBatis 連接數(shù)據(jù)庫配置示例

    Spring Boot MyBatis 連接數(shù)據(jù)庫配置示例

    本篇文章主要介紹了Spring Boot MyBatis 連接數(shù)據(jù)庫示例的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • 詳解SpringBoot中@PostMapping注解的用法

    詳解SpringBoot中@PostMapping注解的用法

    在SpringBoot中,我們經(jīng)常需要編寫RESTful Web服務,以便于客戶端與服務器之間的通信,@PostMapping注解可以讓我們更方便地編寫POST請求處理方法,在本文中,我們將介紹@PostMapping注解的作用、原理,以及如何在SpringBoot應用程序中使用它
    2023-06-06
  • java實現(xiàn)文件導入導出

    java實現(xiàn)文件導入導出

    這篇文章主要介紹了java實現(xiàn)文件導入導出的方法和具體示例代碼,非常的簡單實用,有需要的小伙伴可以參考下
    2016-04-04
  • java中split()方法以及常見算法經(jīng)典案例

    java中split()方法以及常見算法經(jīng)典案例

    這篇文章主要介紹了java中split()方法以及常見算法的相關資料,split()方法可以根據(jù)指定的正則表達式將字符串分割成多個子字符串,并返回一個字符串數(shù)組,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-04-04
  • Java Method類及invoke方法原理解析

    Java Method類及invoke方法原理解析

    這篇文章主要介紹了Java Method類及invoke方法原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • Java springboot yaml語法注解

    Java springboot yaml語法注解

    這篇文章主要介紹了SpringBoot中的yaml語法及靜態(tài)資源訪問問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • java正則表達式提取數(shù)字的方法實例

    java正則表達式提取數(shù)字的方法實例

    這篇文章主要介紹了java正則表達式提取數(shù)字的方法,還有去除字符串數(shù)字的方法,大家參考使用吧
    2013-12-12
  • Spring Boot 的java -jar命令啟動原理詳解

    Spring Boot 的java -jar命令啟動原理詳解

    這篇文章主要介紹了Spring Boot 的java -jar命令啟動原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01

最新評論