如何在SpringBoot中通過@Value注入Map和List并使用YAML配置?

在SpringBoot開發中,我們經常需要從配置文件中讀取各種參數。對于簡單的字符串或數值,直接使用@Value注解就可以了。但當我們需要注入更復雜的數據結構,比如Map或者List時,該怎么操作呢?特別是使用YAML這種更人性化的配置文件格式時,又該如何正確配置?今天我們就來徹底解決這個問題!

1. 基礎回顧:@Value的基本用法

首先,我們快速回顧下@Value注解的基本用法。在Spring中,我們可以這樣注入一個簡單的值:

@Value("${server.port}")
private int serverPort;

對應的application.properties文件內容:

server.port=8080

如果是YAML格式(application.yml),則是:

server:port: 8080

2. 注入List集合

2.1 使用properties格式配置List

假設我們需要注入一個字符串列表,在.properties文件中可以這樣寫:

app.features=feature1,feature2,feature3

然后在Java代碼中:

@Value("${app.features}")
private List<String> features;
2.2 使用YAML格式配置List(更優雅的方式)

YAML格式在處理集合類型時更加直觀:

app:features:- feature1- feature2- feature3

對應的Java代碼保持不變:

@Value("${app.features}")
private List<String> features;

3. 注入Map集合

3.1 使用properties格式配置Map

在.properties中配置Map稍微復雜些:

app.mappings.key1=value1
app.mappings.key2=value2

Java代碼需要使用SPEL表達式:

@Value("#{${app.mappings}}")
private Map<String, String> mappings;
3.2 使用YAML格式配置Map(推薦方式)

YAML格式處理Map更加清晰:

app:mappings:key1: value1key2: value2

Java代碼同樣使用SPEL表達式:

@Value("#{${app.mappings}}")
private Map<String, String> mappings;

4. 復雜數據結構注入

有時候我們需要注入更復雜的結構,比如List中包含Map:

YAML配置:

app:complexData:- name: item1value: 100- name: item2value: 200

Java代碼:

@Value("#{${app.complexData}}")
private List<Map<String, Object>> complexData;

5. 常見問題及解決方案

5.1 注入失敗問題

如果遇到注入失敗的情況,可以:

  1. 檢查YAML格式是否正確縮進
  2. 確保屬性名稱完全匹配
  3. 檢查是否缺少必要的依賴
5.2 默認值設置

可以為注入的值設置默認值:

@Value("${app.features:default1,default2}")
private List<String> features;
5.3 類型轉換問題

Spring會自動進行基本類型轉換,但遇到復雜類型時可能需要自定義轉換器。

如果你在處理復雜配置時遇到困難,可以關注【程序員總部】公眾號。這個由字節11年技術大佬創辦的公眾號,聚集了阿里、字節、百度等大廠的技術專家,經常分享SpringBoot的深度使用技巧,包括各種配置注入的"黑科技"!

6. 最佳實踐建議

  1. 對于復雜配置,優先使用YAML格式
  2. 重要的配置項應該添加注釋說明
  3. 考慮使用@ConfigurationProperties進行類型安全的配置
  4. 為關鍵配置設置合理的默認值

7. 性能考慮

雖然@Value使用方便,但在需要頻繁讀取配置的場景下,建議:

  1. 將配置值緩存到成員變量中
  2. 對于不變的配置,使用final修飾
  3. 考慮使用@ConfigurationProperties的懶加載特性

8. 總結

通過本文我們學習了:

  • 使用@Value注入List和Map的基本方法
  • YAML和properties格式的配置差異
  • 處理復雜數據結構的技巧
  • 常見問題的解決方案

記住,在SpringBoot中,YAML格式通常更適合配置復雜數據結構,它更清晰易讀。而@Value注解雖然簡單,但在處理復雜類型時需要配合SPEL表達式使用。

現在就去試試這些技巧吧!如果你在實踐過程中遇到任何問題,歡迎在評論區留言討論。

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

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

相關文章

短信驗證碼安全實戰:三網API+多語言適配開發指南

在短信服務中&#xff0c;創建自定義簽名是發送通知、驗證信息和其他類型消息的重要步驟。萬維易源提供的“三網短信驗證碼”API為開發者和企業提供了高效、便捷的自定義簽名創建服務&#xff0c;可以通過簡單的接口調用提交簽名給運營商審核。本文將詳細介紹如何使用該API&…

RabbitMQ和Seata沖突嗎?Seata與Spring中的事務管理沖突嗎

1. GlobalTransactional 和 Transactional 是否沖突&#xff1f; 答&#xff1a;不沖突&#xff0c;它們可以協同工作&#xff0c;但作用域不同。 Transactional: 這是 Spring 提供的注解&#xff0c;用于管理單個數據源內的本地事務。在你當前的 register 方法中&#xff0c…

一臺服務器已經有個python3.11版本了,如何手動安裝 Python 3.10,兩個版本共存

環境&#xff1a; debian12.8 python3.11 python3.10 問題描述&#xff1a; 一臺服務器已經有個python3.11版本了&#xff0c;如何手動安裝 Python 3.10&#xff0c;兩個版本共存 解決方案&#xff1a; 1.下載 Python 3.10 源碼&#xff1a; wget https://www.python.or…

c++中的enum變量 和 constexpr說明符

author: hjjdebug date: 2025年 04月 23日 星期三 13:40:21 CST description: c中的enum變量 和 constexpr說明符 文章目錄 1.Q:enum 類型變量可以有,--操作嗎&#xff1f;1.1補充: c/c中enum的另一個細微差別. 2.Q: constexpr 修飾的函數,要求傳入的參數必需是常量嗎&#xff…

postman工具

postman工具 進入postman官網 www.postman.com/downloads/ https://www.postman.com/downloads/ https://www.postman.com/postman/published-postman-templates/documentation/ae2ja6x/postman-echo?ctxdocumentation Postman Echo is a service you can use to test your …

Spring和Spring Boot集成MyBatis的完整對比示例,包含從項目創建到測試的全流程代碼

以下是Spring和Spring Boot集成MyBatis的完整對比示例&#xff0c;包含從項目創建到測試的全流程代碼&#xff1a; 一、Spring集成MyBatis示例 1. 項目結構 spring-mybatis-demo/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com.example/…

【數據可視化-24】巧克力銷售數據的多維度可視化分析

?? 博主簡介:曾任某智慧城市類企業算法總監,目前在美國市場的物流公司從事高級算法工程師一職,深耕人工智能領域,精通python數據挖掘、可視化、機器學習等,發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN人工智能領域的優質創作者,提供AI相關的技術咨詢、項目開發和個…

c語言-分支結構

以下是我初學C語言的筆記記錄&#xff0c;歡迎留言補充 一&#xff0c;分支結構分為幾個 兩個&#xff0c;一個是if語句&#xff0c;一個是Switch語句 二&#xff0c;if語句 &#xff08;1&#xff09;結構體 int main() {if()//判斷條件{//表達式}else if()//判斷條件{//表達式…

數據庫MySQL學習——day4(更多查詢操作與更新數據)

文章目錄 1、聚合函數&#xff08;Aggregate Functions&#xff09;2、分組查詢&#xff08;GROUP BY&#xff09;3、更新數據&#xff08;UPDATE&#xff09;4、刪除數據&#xff08;DELETE&#xff09;5、進階練習示例6、 今日小結 1、聚合函數&#xff08;Aggregate Functio…

Spark-SQL 項目

一、項目概述 &#xff08;一&#xff09;實驗目標 統計有效數據條數&#xff1a;篩選出uid、phone、addr三個字段均無空值的記錄并計數。提取用戶數量最多的前 20 個地址&#xff1a;按地址分組統計用戶數&#xff0c;按降序排序后取前 20 名。 &#xff08;二&#xff09;…

Redis的ZSet對象底層原理——跳表

我們來聊聊「跳表&#xff08;Skip List&#xff09;」&#xff0c;這是一個既經典又優雅的數據結構&#xff0c;尤其在 Redis 中非常重要&#xff0c;比如 ZSet&#xff08;有序集合&#xff09;底層就用到了跳表。 &#x1f31f; 跳表&#xff08;Skip List&#xff09;簡介 …

2025深圳中興通訊安卓開發社招面經

2月27號 中興通訊一面 30多分鐘 自我介紹 聊項目 我的優缺點&#xff0c;跟同事相比&#xff0c;有什么突出的地方 Handler機制&#xff0c;如何判斷是哪個消息比較耗時 設計模式&#xff1a;模板模式 線程的狀態 線程的開啟方式 線程池原理 活動的啟動模式 Service和Activity…

【Castle-X機器人】二、智能導覽模塊安裝與調試

持續更新。。。。。。。。。。。。。。。 【Castle-X機器人】智能導覽模塊安裝與調試 二、智能導覽模塊安裝與調試2.1 智能導覽模塊安裝2.2 智能導覽模塊調試2.2.1 紅外測溫傳感器測試2.2.2 2D攝像頭測試 二、智能導覽模塊安裝與調試 2.1 智能導覽模塊安裝 使用相應工具將智能…

深入理解二叉樹遍歷:遞歸與棧的雙重視角

二叉樹的遍歷前序遍歷中序遍歷后續遍歷總結 二叉樹的遍歷 雖然用遞歸的方法遍歷二叉樹實現起來更簡單&#xff0c;但是要想深入理解二叉樹的遍歷&#xff0c;我們還必須要掌握用棧遍歷二叉樹&#xff0c;遞歸其實就是利用了系統棧去遍歷。特此記錄一下如何用雙重視角去看待二叉…

Qt Creator中自定義應用程序的可執行文件圖標

要在Qt Creator中為你的應用程序設置自定義可執行文件圖標&#xff0c;你需要按照以下步驟操作&#xff1a; Windows平臺設置方法 準備圖標文件&#xff1a; 創建一個.ico格式的圖標文件&#xff08;推薦使用256x256像素&#xff0c;包含多種尺寸&#xff09; 可以使用在線工…

Windows11系統中GIT下載

Windows11系統中GIT下載 0、GIT背景介紹0.0 GIT概述0.1 GIT誕生背景0.2 Linus Torvalds 的設計目標0.3 Git 的誕生&#xff08;2005 年&#xff09;0.4 Git 的后續發展0.5 為什么 Git 能成功&#xff1f; 1、資源下載地址1.1 官網資源1.2 站內資源 2、安裝指導3、驗證是否下載完…

react的fiber 用法

在 React 里&#xff0c;Fiber 是 React 16.x 及后續版本采用的協調算法&#xff0c;它把渲染工作分割成多個小任務&#xff0c;讓 React 可以在渲染過程中暫停、恢復和復用任務&#xff0c;以此提升渲染性能與響應能力。在實際開發中&#xff0c;你無需直接操作 Fiber 節點&am…

FPGA前瞻篇-數字電路基礎-邏輯門電路設計

模擬信號&#xff1a; 一條隨時間連續變化、平滑波動的曲線&#xff0c;比如正弦波。 數字信號&#xff1a; 一條只有高低兩個狀態&#xff08;0和1&#xff09;&#xff0c;跳變清晰的方波曲線。 在 IC 或 FPGA 的邏輯設計中&#xff0c;我們通常只能處理數字信號&#xff0…

RabbitMQ 基礎概念(隊列、交換機、路由鍵、綁定鍵、信道、連接、虛擬主機、多租戶)介紹

本文是博主在梳理 RabbitMQ 知識的過程中&#xff0c;將所遇到和可能會遇到的基礎知識記錄下來&#xff0c;用作梳理 RabbitMQ 的整體架構和功能的線索文章&#xff0c;通過查找對應的知識能夠快速的了解對應的知識而解決相應的問題。 文章目錄 一、RabbitMQ 是什么&#xff1f…

機器學習第一篇 線性回歸

數據集&#xff1a;公開的World Happiness Report | Kaggle中的happiness dataset2017. 目標&#xff1a;基于GDP值預測幸福指數。&#xff08;單特征預測&#xff09; 代碼&#xff1a; 文件一&#xff1a;prepare_for_traning.py """用于科學計算的一個庫…