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

SpringBoot3各種配置的優(yōu)先級對比小結(jié)

 更新時間:2024年12月16日 10:09:30   作者:CoderJia_  
SpringBoot3提供了多種配置來源以滿足不同場景下的需求,本文詳細介紹了SpringBoot3中的配置優(yōu)先級對比小結(jié),具有一定的參考價值,感興趣的可以了解一下

Spring Boot 的核心設(shè)計之一是“約定優(yōu)于配置”(Convention Over Configuration),這使得它能夠根據(jù)默認值和用戶提供的配置快速啟動應(yīng)用程序。然而,在實際開發(fā)中,應(yīng)用的配置可能來自多個來源。理解這些配置來源的優(yōu)先級非常重要,以便在配置沖突時確保程序按預(yù)期運行。

本文將詳細介紹 Spring Boot 3 中的各種配置來源及其優(yōu)先級,并提供實際案例和最佳實踐。

1. 配置優(yōu)先級概述

Spring Boot 3 的配置有以下幾種來源(按照優(yōu)先級從高到低排列):

命令行參數(shù)

java -D 系統(tǒng)屬性

環(huán)境變量

application.properties 或 application.yml

  • 位于 src/main/resources 中的默認配置
  • 外部配置文件

Profile-specific 配置

  • application-{profile}.properties 或 application-{profile}.yml
  • @PropertySource 注解

默認屬性

2. 各種配置來源的優(yōu)先級詳解

為了方便展示各種配置來源的優(yōu)先級,下面將采用優(yōu)先級從低到高的順序依次展示各種配置的生效情況。

2.1 默認屬性(最低優(yōu)先級)

當(dāng)啟動項目沒有提供某個屬性時,則使用 Spring Boot 的默認值。

示例:如果未配置 server.port,則使用默認端口 8080。

默認端口8080

2.2 @PropertySource 注解

通過 @PropertySource 注解加載的配置文件優(yōu)先級較低,但可以用于加載自定義的配置文件。

示例:

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

server.port=8081

創(chuàng)建一個配置類,用 @PropertySource 加載自定義配置文件。

@Configuration
@PropertySource("classpath:custom.properties")
public class CustomConfig {
}

啟動項目,服務(wù)端口為自定義配置的8081。

@PropertySource 注解加載配置

2.3 配置文件(application.properties 或 application.yml)

application.properties 或 application.yml 是最常用的配置來源。它們可以存在于 src/main/resources 中,也可以作為外部文件。

加載順序:

  • 外部文件優(yōu)先于內(nèi)部文件(src/main/resources)。
  • 文件名以 application 開頭,默認加載 application.properties 或 application.yml
  • 位置從高到低優(yōu)先級排序:

    當(dāng)前目錄

    /config 子目錄

    JAR 包根目錄

示例:

server:
  port: 8082

image-20241116142457932

2.4 Profile-specific 配置

Spring Boot 支持根據(jù) Profile 加載特定的配置文件,例如 application-prod.yml 或 application-dev.yml,這種方式可以幫助開發(fā)者輕松管理和切換開發(fā)、測試、生產(chǎn)等不同環(huán)境的配置。

默認未激活 Profile 情況下, application.yml 優(yōu)先級高于 application-dev.yml。

image-20241116142616333

激活 Profile 的方式:

  • 命令行參數(shù):

    java -jar app.jar --spring.profiles.active=prod
    
  • 環(huán)境變量:

    export SPRING_PROFILES_ACTIVE=prod
    
  • 配置文件中設(shè)置:

    spring:
      profiles:
        active: prod
    
  • IDEA配置 Active profiles:

image-20241116143542822

優(yōu)先級:Profile-specific 文件的配置優(yōu)先于 application.yml

激活 Profile

application-dev.yml生效

使用場景:

  • 根據(jù)環(huán)境動態(tài)加載不同的配置。

2.5 環(huán)境變量

操作系統(tǒng)級別的環(huán)境變量優(yōu)先于配置文件,但低于命令行參數(shù)和系統(tǒng)屬性。

示例:在 Linux/Mac 上設(shè)置環(huán)境變量:

export SERVER_PORT=8084

在 Windows 上設(shè)置環(huán)境變量:

set SERVER_PORT=8084

或 IDEA設(shè)置環(huán)境變量

IDEA設(shè)置環(huán)境變量

啟動應(yīng)用后,Spring Boot 會自動解析環(huán)境變量 SERVER_PORT 并將其映射到 server.port 屬性。

環(huán)境變量生效

注意: 環(huán)境變量的名稱為大寫字母,并用下劃線 _ 替代點 .。

使用場景:

  • 為容器化部署(如 Docker)提供靈活的配置。
  • 使用 CI/CD 工具注入環(huán)境變量。

2.6 系統(tǒng)屬性(java -D)

通過 JVM 參數(shù) -D 傳遞的系統(tǒng)屬性次于命令行參數(shù),但優(yōu)先于其他來源。

示例:

java -Dserver.port=8085 -jar app.jar

或者通過 IDEA 設(shè)置 JVM 參數(shù):

-Dserver.port=8085

image-20241116144847820

此命令會將 server.port 設(shè)置為 8085:

jvm參數(shù)生效

使用場景:

  • 提供全局系統(tǒng)屬性配置。
  • 部署時設(shè)置 JVM 級別的變量。

2.7 命令行參數(shù)(最高優(yōu)先級)

通過命令行參數(shù)傳遞的配置優(yōu)先級最高。這通常用于在啟動應(yīng)用程序時臨時修改配置,例如更改端口號或激活特定 Profile。

示例:

java -jar app.jar --server.port=8086

或者通過IDEA設(shè)置命令行參數(shù):

設(shè)置命令行參數(shù)

此命令將優(yōu)先于所有其他配置來源設(shè)置端口號為 8086。

image-20241116145151412

使用場景:

  • 部署到生產(chǎn)環(huán)境時臨時覆蓋默認配置。
  • 動態(tài)切換 Profile。

3. bootstrap.yml 和 application.yml優(yōu)先級

bootstrap.yml 和 application.yml 都用于配置應(yīng)用程序的屬性,但它們的作用和優(yōu)先級不同。以下是兩者的詳細對比和優(yōu)先級說明:

3.1. bootstrap.yml 的作用

加載時機bootstrap.yml 在 application.yml 之前加載。

主要用途

  • 用于應(yīng)用的引導(dǎo)配置。
  • 通常用于設(shè)置與 Spring Cloud 相關(guān)的配置,例如 spring.cloud.config.*。
  • 用于在 配置中心(如 Spring Cloud Config Server)中拉取遠程配置。
  • 適合放置一些需要在應(yīng)用初始化時就生效的屬性,例如:
    • 配置文件路徑
    • 加密解密密鑰
    • 注冊中心配置

示例:

# bootstrap.yml
spring:
  application:
    name: my-application
  cloud:
    config:
      uri: http://config-server:8888
      enabled: true

3.2. application.yml 的作用

  • 加載時機application.yml 在 bootstrap.yml 加載之后。
  • 主要用途
    • 配置應(yīng)用的主要屬性,如端口號、數(shù)據(jù)源配置、日志配置等。
    • 一般是開發(fā)者最常用的配置文件。
    • 放置業(yè)務(wù)相關(guān)的配置。

示例:

# application.yml
server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: password

3.3. 優(yōu)先級說明

在屬性加載的優(yōu)先級上:

bootstrap.yml 優(yōu)先于 application.yml。

  • 這是因為 bootstrap.yml 是 Spring Boot 啟動時的引導(dǎo)配置,加載更早。
  • 屬性從 bootstrap.yml 中加載后,會合并到 Spring 的環(huán)境中。

如果 application.yml 中的屬性和 bootstrap.yml 沖突

  • 默認情況下,application.yml 中的屬性會覆蓋 bootstrap.yml 中的屬性(除非 bootstrap.yml 的屬性被標(biāo)記為不可覆蓋,如某些 Spring Cloud 配置)。

3.4. 典型使用場景

bootstrap.yml 的場景

  • 使用 Spring Cloud Config 或其他遠程配置服務(wù)。
  • 初始化階段的配置,例如 spring.application.name、spring.cloud.config.*。
  • 多環(huán)境或動態(tài)配置。

application.yml 的場景

  • 應(yīng)用程序的業(yè)務(wù)配置。
  • 本地配置和日常開發(fā)使用。
  • 配置屬性值可以被命令行參數(shù)、環(huán)境變量等覆蓋。

3.5. 對比

特性bootstrap.ymlapplication.yml
加載時機更早稍后
用途引導(dǎo)配置,主要用于配置中心、初始化應(yīng)用主要配置
覆蓋優(yōu)先級屬性優(yōu)先級較低,但加載較早屬性優(yōu)先級較高
推薦使用場景Spring Cloud Config、注冊中心配置數(shù)據(jù)源、業(yè)務(wù)邏輯相關(guān)配置

4. 配置優(yōu)先級沖突解析

從上面的示例可以看出,當(dāng)同一個屬性來自多個來源時,Spring Boot 按優(yōu)先級選擇高的配置。例如:

  • 配置文件中 application.yml 設(shè)置:
    server:
      port: 8085
    
  • 同時命令行指定 --server.port=8086。

最終優(yōu)先級選擇結(jié)果為 8086,因為命令行參數(shù)優(yōu)先。

5. 最佳實踐

  • 使用默認配置: 避免過度依賴多個來源,盡量使用 application.yml。
  • 使用 Profile-specific 文件: 區(qū)分開發(fā)、測試、生產(chǎn)環(huán)境。
  • 命令行參數(shù)覆蓋配置: 部署時使用命令行參數(shù)靈活調(diào)整配置。
  • 記錄配置來源: 在文檔中記錄不同配置的來源,便于排查問題。

6. 總結(jié)

Spring Boot 3 提供了豐富的配置機制,開發(fā)者可以根據(jù)實際需求選擇合適的方式進行配置管理。了解這些配置來源的優(yōu)先級,有助于在復(fù)雜項目中快速定位問題,提升項目的可維護性。

到此這篇關(guān)于SpringBoot3各種配置的優(yōu)先級對比小結(jié)的文章就介紹到這了,更多相關(guān)SpringBoot3 配置優(yōu)先級內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java線性表的存儲結(jié)構(gòu)及其代碼實現(xiàn)

    java線性表的存儲結(jié)構(gòu)及其代碼實現(xiàn)

    這篇文章主要為大家詳細介紹了Java數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)筆記第一篇,線性表的存儲結(jié)構(gòu)及其代碼實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • java實現(xiàn)簡單學(xué)生管理系統(tǒng)項目

    java實現(xiàn)簡單學(xué)生管理系統(tǒng)項目

    這篇文章主要介紹了java實現(xiàn)簡單學(xué)生管理系統(tǒng)項目,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • 如何獲得spring代理對象的原對象

    如何獲得spring代理對象的原對象

    這篇文章主要介紹了如何獲得spring代理對象的原對象的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Mybatis-plus依賴及配置文件方式

    Mybatis-plus依賴及配置文件方式

    這篇文章主要介紹了Mybatis-plus依賴及配置文件方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Mybatis自關(guān)聯(lián)查詢一對多查詢的實現(xiàn)示例

    Mybatis自關(guān)聯(lián)查詢一對多查詢的實現(xiàn)示例

    這篇文章主要介紹了Mybatis自關(guān)聯(lián)查詢一對多查詢的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Kotlin 基礎(chǔ)教程之泛型

    Kotlin 基礎(chǔ)教程之泛型

    這篇文章主要介紹了Kotlin 基礎(chǔ)教程之泛型的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • java的泛型你真的了解嗎

    java的泛型你真的了解嗎

    這篇文章主要為大家詳細介紹了java的泛型,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • springboot自動配置原理以及spring.factories文件的作用詳解

    springboot自動配置原理以及spring.factories文件的作用詳解

    這篇文章主要介紹了springboot自動配置原理以及spring.factories文件的作用詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • java同步與異步的學(xué)習(xí)筆記整理

    java同步與異步的學(xué)習(xí)筆記整理

    在本篇文章里小編給大家整理了關(guān)于java同步與異步的學(xué)習(xí)筆記整理內(nèi)容,需要的朋友們參考下。
    2020-02-02
  • Java實現(xiàn)廣度優(yōu)先遍歷的示例詳解

    Java實現(xiàn)廣度優(yōu)先遍歷的示例詳解

    廣度優(yōu)先遍歷:廣度優(yōu)先遍歷是連通圖的一種遍歷策略,因為它的思想是從一個頂點V0開始,輻射狀地優(yōu)先遍歷其周圍較廣的區(qū)域故得名。本文詳細介紹了Java如何實現(xiàn)廣度優(yōu)先遍歷,感興趣的小伙伴可以學(xué)習(xí)一下
    2022-02-02

最新評論