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

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

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

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

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

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

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

命令行參數(shù)

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

環(huán)境變量

application.properties 或 application.yml

  • 位于 src/main/resources 中的默認(rèn)配置
  • 外部配置文件

Profile-specific 配置

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

默認(rèn)屬性

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

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

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

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

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

默認(rèn)端口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 開頭,默認(rèn)加載 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)境的配置。

默認(rè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)境變量的名稱為大寫字母,并用下劃線 _ 替代點(diǎ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)境時臨時覆蓋默認(rèn)配置。
  • 動態(tài)切換 Profile。

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

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

3.1. bootstrap.yml 的作用

加載時機(jī)bootstrap.yml 在 application.yml 之前加載。

主要用途

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

示例:

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

3.2. application.yml 的作用

  • 加載時機(jī)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 沖突

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

3.4. 典型使用場景

bootstrap.yml 的場景

  • 使用 Spring Cloud Config 或其他遠(yuǎn)程配置服務(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
加載時機(jī)更早稍后
用途引導(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. 最佳實(shí)踐

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

6. 總結(jié)

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

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

相關(guān)文章

  • Java基于Base64實(shí)現(xiàn)編碼解碼圖片文件

    Java基于Base64實(shí)現(xiàn)編碼解碼圖片文件

    這篇文章主要介紹了Java基于Base64實(shí)現(xiàn)編碼解碼圖片文件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • JVM的垃圾回收算法一起來看看

    JVM的垃圾回收算法一起來看看

    這篇文章主要為大家詳細(xì)介紹了JVM的垃圾回收算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Java使用okhttp3發(fā)送請求的實(shí)現(xiàn)示例

    Java使用okhttp3發(fā)送請求的實(shí)現(xiàn)示例

    OkHttp3是一個高效的HTTP客戶端,支持HTTP/2、GZIP壓縮、響應(yīng)緩存和異步/同步請求,本文就來介紹一下Java使用okhttp3發(fā)送請求的實(shí)現(xiàn)示例,感興趣的可以了解一下
    2025-12-12
  • mybatis返回list<Integer>時resultType寫Integer問題

    mybatis返回list<Integer>時resultType寫Integer問題

    這篇文章主要介紹了mybatis返回list<Integer>時resultType寫Integer問題,具有很好的參考價值,希望對大家有所幫助,
    2023-12-12
  • 如何優(yōu)雅的替換掉Java代碼中的if else

    如何優(yōu)雅的替換掉Java代碼中的if else

    這篇文章主要介紹了如何優(yōu)雅的替換掉Java代碼中的if else,幫助大家優(yōu)化自己的Java代碼,提高可讀性與簡潔性,感興趣的朋友可以了解下
    2020-09-09
  • Spring中的@ConditionalOnProperty注解使用詳解

    Spring中的@ConditionalOnProperty注解使用詳解

    這篇文章主要介紹了Spring中的@ConditionalOnProperty注解使用詳解,在 spring boot 中有時候需要控制配置類是否生效,可以使用 @ConditionalOnProperty 注解來控制 @Configuration 是否生效,需要的朋友可以參考下
    2024-01-01
  • Java基礎(chǔ)之初識Maven

    Java基礎(chǔ)之初識Maven

    這篇文章主要介紹了Java基礎(chǔ)之初識Maven,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • jvm字符串常量池在什么內(nèi)存區(qū)域問題解析

    jvm字符串常量池在什么內(nèi)存區(qū)域問題解析

    這篇文章主要介紹了jvm字符串常量池在什么內(nèi)存區(qū)域的問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Java 實(shí)戰(zhàn)項目錘煉之仿天貓網(wǎng)上商城的實(shí)現(xiàn)流程

    Java 實(shí)戰(zhàn)項目錘煉之仿天貓網(wǎng)上商城的實(shí)現(xiàn)流程

    讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+jsp+servlet+mysql+ajax實(shí)現(xiàn)一個仿天貓網(wǎng)上商城項目,大家可以在過程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • Java利用Spire.Doc for Java實(shí)現(xiàn)Word轉(zhuǎn) PCL打印格式

    Java利用Spire.Doc for Java實(shí)現(xiàn)Word轉(zhuǎn) PCL打印格式

    在日常的企業(yè)級開發(fā)中,文檔處理是一個繞不開的話題,本文將介紹如何在 Java 后端環(huán)境中,利用 Spire.Doc for Java 庫,在不依賴 Microsoft Office 軟件的情況下,實(shí)現(xiàn) Word 文檔到 PCL 格式的轉(zhuǎn)換,感興趣的可以了解下
    2026-04-04

最新評論

镇巴县| 甘孜| 岳普湖县| 高邑县| 洱源县| 德兴市| 和硕县| 内乡县| 沅江市| 绥江县| 自治县| 湘阴县| 荣成市| 满洲里市| 雷波县| 昌黎县| 密云县| 城口县| 阿拉善盟| 师宗县| 宣武区| 通榆县| 镇雄县| 寿光市| 双流县| 南靖县| 昌图县| 朝阳市| 嘉定区| 湟中县| 西乌| 北碚区| 交城县| 监利县| 临朐县| 历史| 庄河市| 应城市| 安化县| 安陆市| 资溪县|