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

SpringBoot中ConfigurationProperties使用詳解

 更新時間:2026年01月26日 10:41:59   作者:Vintanz  
ConfigurationProperties是Spring Boot中管理外部配置的核心工具,通過“配置文件→實體類→代碼使用”的流程,實現(xiàn)了配置的集中管理和動態(tài)綁定,感興趣的可以了解一下

在Spring Boot中,@ConfigurationProperties 是一個核心注解,用于將外部配置信息(如 application.propertiesapplication.yml、環(huán)境變量、命令行參數(shù)等)自動綁定到JavaBean的屬性上,實現(xiàn)配置與代碼的解耦。

核心作用

通過 @ConfigurationProperties,可以避免在代碼中硬編碼配置(如數(shù)據(jù)庫地址、端口號、第三方API密鑰等),而是從外部配置源動態(tài)讀取,方便環(huán)境切換(開發(fā)、測試、生產(chǎn))。

基本使用步驟

1. 引入依賴(默認已包含)

@ConfigurationProperties 屬于Spring Boot核心功能,只要項目引入了 spring-boot-starter(或任意 Starter,如 spring-boot-starter-web),就會自動包含相關(guān)依賴,無需額外添加。

2. 創(chuàng)建配置綁定實體類

定義一個JavaBean,使用 @ConfigurationProperties 注解指定配置前綴(prefix),并通過屬性名與配置文件中的key對應(yīng)。

示例:綁定數(shù)據(jù)庫相關(guān)配置

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

// 前綴為"spring.datasource",對應(yīng)配置文件中"spring.datasource.xxx"的配置
@ConfigurationProperties(prefix = "spring.datasource")
@Component // 注冊為Spring組件,使其被掃描并綁定配置
public class DataSourceProperties {
    // 對應(yīng)配置文件中的"spring.datasource.url"
    private String url;
    // 對應(yīng)"spring.datasource.username"
    private String username;
    // 對應(yīng)"spring.datasource.password"
    private String password;
    // 對應(yīng)"spring.datasource.driver-class-name"(支持寬松綁定,見下文)
    private String driverClassName;

    // 必須提供getter和setter(Spring通過setter注入配置值)
    public String getUrl() { return url; }
    public void setUrl(String url) { this.url = url; }

    public String getUsername() { return username; }
    public void setUsername(String username) { this.username = username; }

    // 省略其他getter/setter
}

3. 外部配置文件(application.yml 或 application.properties)

在配置文件中定義對應(yīng)前綴的配置項,屬性名與實體類的屬性名通過“寬松綁定”規(guī)則匹配。

application.yml 示例

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver # 對應(yīng)實體類的driverClassName

application.properties 示例

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

4. 啟用配置綁定(兩種方式)

  • 方式1:在實體類上添加 @Component 注解(如步驟2示例),使其被Spring掃描并注冊為Bean,自動觸發(fā)配置綁定。
  • 方式2:在配置類上使用 @EnableConfigurationProperties 顯式指定需要綁定的類(適用于實體類未加 @Component 的場景):
    import org.springframework.boot.context.properties.EnableConfigurationProperties;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    // 顯式啟用DataSourceProperties的配置綁定
    @EnableConfigurationProperties(DataSourceProperties.class)
    public class MyConfig {
    }
    

5. 在代碼中使用綁定的配置

通過依賴注入(@Autowired)將綁定好的實體類注入到Service/Controller中,直接使用配置值。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    // 注入綁定了配置的實體類
    @Autowired
    private DataSourceProperties dataSourceProperties;

    @GetMapping("/db-info")
    public String getDbInfo() {
        return "數(shù)據(jù)庫URL:" + dataSourceProperties.getUrl() + 
               ",用戶名:" + dataSourceProperties.getUsername();
    }
}

關(guān)鍵特性

1. 寬松綁定(Relaxed Binding)

配置文件中的key與實體類屬性名無需嚴格一致,支持多種命名風格轉(zhuǎn)換:

  • 配置文件中:driver-class-name(短橫線分隔,kebab-case)
  • 實體類中:driverClassName(駝峰式,camelCase)
  • 其他支持:下劃線(driver_class_name)、全大寫(DRIVER_CLASS_NAME)等。

2. 類型轉(zhuǎn)換

Spring會自動將配置文件中的字符串值轉(zhuǎn)換為實體類屬性的類型(如 int、boolean、List、Map 等)。

示例:綁定集合類型

@ConfigurationProperties(prefix = "app")
@Component
public class AppProperties {
    private List<String> allowedOrigins; // 對應(yīng)app.allowed-origins
    private Map<String, String> configMap; // 對應(yīng)app.config-map

    // getter/setter
}

配置文件(application.yml)

app:
  allowed-origins:
    - http://localhost:8080
    - http://example.com
  config-map:
    key1: value1
    key2: value2

3. 配置校驗

結(jié)合 @Validated 和JSR-303校驗注解(如 @NotNull@Min、@Pattern),可對配置值進行合法性校驗,避免無效配置。

示例

import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;

@ConfigurationProperties(prefix = "app")
@Component
@Validated // 啟用校驗
public class AppProperties {

    @NotEmpty(message = "應(yīng)用名稱不能為空") // 校驗非空
    private String name;

    @NotNull(message = "端口號不能為空") // 校驗非null
    private Integer port;

    // getter/setter
}

若配置文件中未設(shè)置 app.nameapp.port,啟動時會拋出校驗異常,快速發(fā)現(xiàn)配置問題。

4. 配置元數(shù)據(jù)(提高開發(fā)體驗)

通過添加 spring-boot-configuration-processor 依賴,可生成配置元數(shù)據(jù),在IDE中編寫配置文件時獲得自動提示(如屬性名、類型、描述)。

添加依賴(pom.xml)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

添加后,IDE(如IDEA)會在編寫 application.yml 時提示 spring.datasource.url 等屬性,減少拼寫錯誤。

與 @Value 的區(qū)別

特性@ConfigurationProperties@Value
用途批量綁定多個配置屬性到實體類單個屬性注入(如 @Value("${app.name}"))
類型轉(zhuǎn)換自動支持復雜類型(List、Map等)需手動處理復雜類型轉(zhuǎn)換
校驗支持支持(結(jié)合 @Validated)不支持
寬松綁定支持不支持(需嚴格匹配key)
元數(shù)據(jù)提示支持(需processor依賴)不支持

建議:配置項較多時優(yōu)先使用 @ConfigurationProperties;單個簡單配置可使用 @Value

總結(jié)

@ConfigurationProperties 是Spring Boot中管理外部配置的核心工具,通過“配置文件→實體類→代碼使用”的流程,實現(xiàn)了配置的集中管理和動態(tài)綁定,尤其適合多環(huán)境配置、復雜配置場景,大幅提升了配置的可維護性。

到此這篇關(guān)于SpringBoot中ConfigurationProperties使用詳解的文章就介紹到這了,更多相關(guān)ConfigurationProperties使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot3實現(xiàn)上傳圖片并返回路徑讓前端顯示圖片

    SpringBoot3實現(xiàn)上傳圖片并返回路徑讓前端顯示圖片

    這篇文章主要介紹了SpringBoot3實現(xiàn)上傳圖片并返回路徑讓前端顯示圖片,文中通過圖文和代碼講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-12-12
  • Java While循環(huán) do-while循環(huán)用法

    Java While循環(huán) do-while循環(huán)用法

    循環(huán)語句就是讓計算機根據(jù)條件做循環(huán)計算,在條件滿足時繼續(xù)循環(huán),條件不滿足時退出循環(huán),需要的朋友可以參考下
    2020-11-11
  • Java遞歸實現(xiàn)JSON全路徑自動化探測工具

    Java遞歸實現(xiàn)JSON全路徑自動化探測工具

    在日常開發(fā)中,面對嵌套十幾層、成百上千行的復雜 JSON,開發(fā)者常面臨以下困境:路徑定位難,AI 幻覺問題,文檔缺失等問題,本文分享一個輕量級的 Java 工具類,利用遞歸算法一鍵拉平 JSON,輸出所有葉子節(jié)點的完整路徑,需要的朋友可以參考下
    2026-02-02
  • java樂觀鎖原理與實現(xiàn)案例分析

    java樂觀鎖原理與實現(xiàn)案例分析

    這篇文章主要介紹了java樂觀鎖原理與實現(xiàn),結(jié)合具體案例形式分析了樂觀鎖的原理及java使用樂觀鎖實現(xiàn)自動派單功能的相關(guān)操作技巧,需要的朋友可以參考下
    2019-10-10
  • Sublime Text 打開Java文檔中文亂碼的解決方案

    Sublime Text 打開Java文檔中文亂碼的解決方案

    這篇文章主要介紹了Sublime Text 中文亂碼的解決方案,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12
  • PowerJob的MapProcessor工作流程源碼解讀

    PowerJob的MapProcessor工作流程源碼解讀

    這篇文章主要為大家介紹了PowerJob的MapProcessor工作流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Java中IO流 字節(jié)流實例詳解

    Java中IO流 字節(jié)流實例詳解

    這篇文章主要介紹了Java中IO流 字節(jié)流實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Java Lambda表達式與引用類淺析

    Java Lambda表達式與引用類淺析

    Lambda表達式是Java SE8中一個重要的新特性,允許通過表達式來代替功能接口。本文將通過一些簡單的示例和大家講講Lamda表達式的使用,感興趣的可以了解一下
    2023-01-01
  • 一文搞懂Java中的抽象類和接口到底是什么

    一文搞懂Java中的抽象類和接口到底是什么

    在類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類稱為抽象類,接口是Java中最重要的概念之一,它可以被理解為一種特殊的類,不同的是接口的成員沒有執(zhí)行體,是由全局常量和公共的抽象方法所組成,本文給大家介紹Java抽象類和接口,感興趣的朋友一起看看吧
    2022-04-04
  • 關(guān)于mybatis傳入?yún)?shù)一直為null的問題

    關(guān)于mybatis傳入?yún)?shù)一直為null的問題

    這篇文章主要介紹了關(guān)于mybatis傳入?yún)?shù)一直為null的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評論

新郑市| 德钦县| 铜陵市| 甘泉县| 壤塘县| 塔河县| 民丰县| 利川市| 正安县| 当涂县| 辉县市| 景洪市| 文成县| 沿河| 井研县| 玉龙| 石家庄市| 日土县| 武安市| 垣曲县| 宝应县| 吉安县| 金乡县| 布拖县| 夏邑县| 尉氏县| 宜阳县| 铜山县| 秦安县| 永仁县| 扬州市| 买车| 宜宾市| 大丰市| 苗栗县| 凌云县| 牡丹江市| 日土县| 霍州市| 普宁市| 桃园县|