Spring Boot屬性設置方法及優先級完整說明+表格對比

Spring Boot屬性設置方法及優先級完整說明

官網參考:
https://docs.spring.io/spring-boot/3.4-SNAPSHOT/reference/features/external-config.html#features.external-config.files

屬性設置方法優先級順序(從高到低)
  1. 命令行參數--key=value
  2. SpringApplication.setDefaultProperties(默認屬性)
  3. 系統屬性-Dkey=value
  4. JNDI屬性(通過JNDI接口)
  5. 來自java:comp/env的JNDI屬性
  6. 操作系統環境變量NAME=value
  7. 隨機屬性random.*,需啟用或顯式配置)
  8. 外部配置文件application-{profile}.propertiesapplication.yml
  9. 內部配置文件application-{profile}.propertiesapplication.yml
  10. 外部通用配置文件application.propertiesapplication.yml
  11. 內部通用配置文件application.propertiesapplication.yml
  12. @PropertySource 注解
  13. @Value 注解
  14. @ConfigurationProperties 綁定
  15. Environment 直接獲取

代碼示例

1. 命令行參數
// 啟動命令:java -jar app.jar --name=CommandLine
@Configuration
public class CommandLineConfig {@Value("${name:Default}") private String name; // 默認值為Default@Beanpublic String getName() {return name;}
}

2. SpringApplication.setDefaultProperties
// 啟動類中設置默認屬性
public static void main(String[] args) {Map<String, Object> defaultProps = new HashMap<>();defaultProps.put("name", "SpringAppDefault");SpringApplication app = new SpringApplication(App.class);app.setDefaultProperties(defaultProps);app.run(args);
}

3. 系統屬性
// 啟動命令:java -Dname=SystemProp -jar app.jar
@Configuration
public class SystemPropConfig {@Value("${name:Default}") private String name;@Beanpublic String getName() {return name;}
}

4. JNDI屬性
// 需要JNDI服務器配置(如Tomcat)
// JNDI綁定示例(需實現JNDI環境):
// Context context = new InitialContext();
// context.bind("java:comp/env/name", "JNDIValue");@Configuration
public class JndiConfig {@Value("${name:Default}") private String name;@Beanpublic String getName() {return name;}
}

5. 操作系統環境變量
# 在操作系統中設置環境變量
export NAME=OsEnvVar
@Configuration
public class OsEnvConfig {@Value("${name:Default}") private String name;@Beanpublic String getName() {return name;}
}

6. 隨機屬性(random.*
# application.properties
random.name=RandomValue
@Component
public class RandomBean {@Value("${name:Default}") private String name;public String getName() {return name;}
}

7. 外部/內部配置文件(帶profile)
# 外部配置文件:application-dev.properties(優先級高于內部文件)
name=ExternalProfile
# 內部配置文件:src/main/resources/application-dev.yml
name: InternalProfile
// 啟動時指定profile:
java -jar app.jar --spring.profiles.active=dev

8. @PropertySource
@Configuration
@PropertySource("classpath:custom.properties") // 指定自定義配置文件
public class PropertySourceConfig {@Value("${name:Default}") private String name;@Beanpublic String getName() {return name;}
}
# custom.properties
name=PropertySource

9. Environment 直接獲取
@Service
public class EnvironmentService {@Autowiredprivate Environment env;public String getName() {return env.getProperty("name", "Default");}
}

對比表格

方法使用方式優先級適用場景示例代碼片段
命令行參數--key=value 啟動時指定最高運行時動態覆蓋配置java -jar app.jar --name=CommandLine
SpringApplication.setDefaultProperties通過代碼設置默認屬性(啟動類中配置)程序啟動前設置默認值app.setDefaultProperties(defaultProps)
系統屬性-Dkey=value 啟動時指定次之JVM 級別配置java -Dname=SystemProp -jar app.jar
JNDI屬性通過JNDI接口綁定(需JNDI服務器支持)較高企業級環境(如Tomcat)中的集中配置new InitialContext().bind("java:comp/env/name", "JNDIValue")
java:comp/env 的JNDI屬性通過java:comp/env前綴綁定中高標準化JNDI配置路徑@Value("${name}") 綁定到java:comp/env/name
操作系統環境變量操作系統設置環境變量(如export NAME=Value中高跨平臺環境變量配置export NAME=OsEnvVar
隨機屬性(random.*在配置文件中設置random.*前綴的屬性中等生成隨機值(如密碼、密鑰)random.name=RandomValue
外部配置文件(帶profile)獨立于jar的application-{profile}.propertiesapplication.yml中等環境特定配置(如dev/test/prod)src/main/resources/application-dev.properties
內部配置文件(帶profile)jar包內的application-{profile}.propertiesapplication.yml中等內置環境配置src/main/resources/application-dev.yml
外部通用配置文件獨立于jar的application.propertiesapplication.yml中低通用配置覆蓋內部文件src/main/resources/application.properties
內部通用配置文件jar包內的application.propertiesapplication.yml中低基礎配置src/main/resources/application.yml
@PropertySource@Configuration類中通過注解指定外部屬性文件較低自定義配置文件綁定@PropertySource("classpath:custom.properties")
@Value直接注入字段較低簡單單值注入@Value("${name}") private String name;
@ConfigurationProperties綁定POJO對象到配置前綴最低復雜對象配置綁定@ConfigurationProperties(prefix = "user")
Environment通過Environment抽象類獲取屬性最低需要靈活獲取多種屬性的場景env.getProperty("name", "Default")

優先級驗證示例

假設同時設置以下屬性:

  • 命令行參數--name=CommandLine
  • 系統屬性-Dname=SystemProp
  • 環境變量export NAME=OsEnvVar
  • 配置文件application.properties 中設置 name=ConfigFile

實際運行時,CommandLine 的值會生效,因為命令行參數的優先級最高。如果移除命令行參數,則系統屬性的值 SystemProp 會生效,依此類推。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/73605.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/73605.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/73605.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

上門家政小程序實戰,從0到1解決方案

一、邏輯分析 上門家政小程序主要涉及用戶端和服務端兩大部分。用戶端需要實現服務瀏覽、預約下單、訂單跟蹤等功能&#xff1b;服務端則要處理訂單管理、服務人員管理、數據統計等任務。以下是詳細的功能模塊分析&#xff1a; 用戶注冊與登錄&#xff1a;用戶通過手機號或第三…

LLVM學習-DragonEgg工具

2.2.2 使用DragonEgg和LLVM工具了解編譯流程 如果希望看到前端的運行情況&#xff0c;請使用-S -fplugin-arg-dragonegg-emit-ir標志&#xff0c;該標志將產生以LLVM IR代碼表示的人工可讀文件。 一旦編譯器將程序轉換為IR則停止編譯&#xff0c;并將內存中的表示內容寫入磁盤的…

關于cmd中出現無法識別某某指令的問題

今天來解決以下這個比較常見的問題&#xff0c;安裝各種軟件都可能會發生&#xff0c;一般是安裝時沒勾選注冊環境變量&#xff0c;導致cmd無法識別該指令。例如mysql&#xff0c;git等&#xff0c;一般初學者可能不太清楚。 解決這類問題最主要的是了解環境變量的概念&#x…

ThreadLocal詳解與高頻場景實戰指南

ThreadLocal詳解與高頻場景實戰指南 1. ThreadLocal概述 ThreadLocal是Java提供的線程本地變量機制&#xff0c;用于實現線程級別的數據隔離。每個訪問該變量的線程都會獲得獨立的變量副本&#xff0c;適用于需要避免線程間共享數據的場景。 特點&#xff1a; 線程封閉性&a…

【C++初階】---類和對象(上)

1.類的定義 1.1類的定義格式 ? class為定義類的關鍵字&#xff0c;Data為類的名字&#xff0c;{}中為類的主體&#xff0c;注意類定義結束時后?分號不能省略。類體中內容稱為類的成員&#xff1a;類中的變量稱為類的屬性或成員變量;類中的函數稱為類的?法或者成員函數。 ?…

Rust安裝并配置配置vscode編譯器

一. 下載rustup-init.exe rust下載網址&#xff1a;Getting started - Rust Programming Language 根據系統&#xff0c;選擇適合的exe文件 我選擇的的是右邊64bit的 打開下載的文件 輸入1&#xff0c;回車 二. Visual C 安裝 自動下載安裝vs 等待安裝完畢 三. Rust 安裝…

openGl片段著色器的含義

片段著色器的含義及代碼中的應用說明&#xff1a; 1. 片段著色器的基本概念 片段著色器&#xff08;Fragment Shader&#xff09;是OpenGL著色器管線中的關鍵組件&#xff0c;主要用于計算屏幕空間中每個片段&#xff08;對應像素&#xff09;的最終顏色。它是圖形渲染流程的…

事務的四大特性(ACID)詳解

事務的四大特性&#xff08;ACID&#xff09;詳解 在數據庫管理系統&#xff08;如 MySQL&#xff09;中&#xff0c;事務&#xff08;Transaction&#xff09; 是指一組要么全部執行、要么全部不執行的數據庫操作&#xff0c;通常用于確保數據的完整性和一致性。事務有四大核…

ubuntu設置開機自動運行應用

系統版本&#xff1a;Ubuntu 24.04.1 LTS桌面版 按招網上的資料顯示&#xff0c;當前版本主要的實現方式有以下兩種&#xff0c; 方式1&#xff1a;通過圖形界面的【啟動應用程序】設置開機自啟動&#xff1b;方式2&#xff1a;配置為服務實現開機自啟動。 但是在我的電腦上方…

ECharts各類炫酷圖表/3D柱形圖

一、前言 最近雞米花實現了各類的炫酷的圖表&#xff0c;有3D柱形圖、雙邊柱形圖以及異形柱形圖&#xff0c;好了&#xff0c;直接上圖&#xff1a; 二、效果圖 一個個來吧&#xff0c;下面就是代碼啦&#xff0c;注意&#xff0c;一下圖表展示的寬高均為800px*300px 三、異形橫…

機器人原點丟失后找回原點的解決方案與步驟

機器人原點丟失后找回原點的解決方案與步驟 在機器人運行過程中&#xff0c;原點丟失可能導致定位錯誤、運動失控等問題&#xff0c;常見于機械臂、AGV&#xff08;自動導引車&#xff09;、3D打印機等設備。以下是針對原點丟失問題的系統性解決方案及詳細步驟&#xff0c;涵蓋…

HCIP——園區網、VLAN

園區網 園區網搭建核心思路&#xff1a;冗余&#xff08;備份&#xff09;--- 保證其健壯性 1、設備冗余 2、線路冗余 3、網關冗余 4、ups&#xff08;不間斷電源&#xff09;冗余—— 能不斷電&#xff08;物理層&#xff09; 三層交換機和路由器的選擇&#xff1a; 三層交換…

虛擬機(二):Android 篇

虛擬機&#xff08;一&#xff09;&#xff1a;Java 篇 虛擬機&#xff08;二&#xff09;&#xff1a;Android 篇 Dalvik和JVM區別 Dalvik 基于寄存器&#xff0c;而 JVM 基于棧。 基于棧的架構具有更好的可移植性&#xff0c;因為其實現不依賴于物理寄存器基于棧的架構通常指…

Android Token的原理和本地安全存儲

Android Token的原理和本地安全存儲 前言 在移動應用開發中,Token是實現用戶身份驗證和授權的重要機制。本文將深入介紹Token的原理,以及在Android平臺上如何安全地存儲Token,幫助開發者構建可靠的身份驗證系統。 基礎知識 1. Token概述 1.1 Token的作用 身份驗證授權訪…

Vue Kubernetes項目 局部布局 下拉菜單

下拉菜單 [el-dropdown] 下拉菜單也比較簡單&#xff0c;就是類似于按鈕下面來一個下拉菜單。 示例Demo如下&#xff1a; <template><el-dropdown><span class"el-dropdown-link">下拉菜單<i class"el-icon-arrow-down el-icon--right&q…

Android之卡片式滑動

文章目錄 前言一、效果圖二、實現步驟1.主界面xml2.自定義的viewpage3.卡片接口類4.陰影和縮放變化類5.卡片adapter6.卡片adapter的xml7.style8.CardItem9.activity實現10.指示器drawable 總結 前言 對于這個需求&#xff0c;之前的項目也有做過&#xff0c;但是過于趕項目就沒…

(UI自動化測試web端)第二篇:元素定位的方法_css定位之css選擇器

看代碼里的【find_element_by_css_selector( )】( )里的表達式怎么寫&#xff1f; 文章介紹了第三種寫法css選擇器&#xff0c;你要根據網頁中的實際情況來判斷自己到底要用哪一種方法來進行元素定位。每種方法都要多練習&#xff0c;全都熟了之后你在工作當中使用起來元素定位…

使用vscode搭建pywebview集成vue項目示例

文章目錄 前言環境準備項目源碼下載一、項目說明1 目錄結構2 前端項目3 后端項目獲取python安裝包(選擇對應版本及系統) 三、調試與生成可執行文件1 本地調試2 打包應用 四、核心代碼說明1、package.json2、vite.config.ts設置3、main.py后端入口文件說明 參考文檔 前言 本節我…

C stm32f10x LED亮

#include<stm32f10x.h>int main(){#if 0 //APIOA 時鐘初始化unsigned int * p(unsigned int*)0x40021018;*p | 0x1<<2;//A0 推挽輸出p(unsigned int*)0x40010800;*p *p & ~0xf | 0x1;//A0低電平p(unsigned int*)0x4001080c;*p & ~0x1;#endifRCC->APB2E…

redux ,react-redux,redux-toolkit 簡單總結

Redux、React-Redux 和 Redux Toolkit 是協同工作的三個庫&#xff0c;各自承擔不同角色&#xff0c;相互協同。 Redux&#xff1a;基礎底座 底層狀態管理庫&#xff0c;負責狀態存儲、Action 派發和 Reducer 執行 ?React-Redux&#xff1a;連接 React 組件與 Redux Store 通…