springboot env 多環境配置入門與實戰

Spring Boot3 Env 項目地址

https://gitee.com/supervol/loong-springboot-study

(記得給個start,感謝)

Env 概述

????????在 Spring Boot 3 開發中,多環境配置是核心能力之一,其目的是為不同場景(如開發、測試、生產)提供隔離的配置(如數據庫連接、端口、日志級別),避免手動修改配置文件的繁瑣與風險。Spring Boot 3 遵循 “約定大于配置” 原則,通過標準化的文件命名、靈活的環境激活方式,實現多環境的無縫切換。

Env 核心

????????Spring Boot 3 通過配置文件命名規則區分不同環境,核心約定如下:

1. 配置文件類型

????????支持兩種主流格式(推薦yaml,層級結構更清晰,適合多環境):

  • properties:鍵值對格式,如application.properties
  • yaml(YAML):層級縮進格式,如application.yaml(推薦)

2. 文件命名規則

所有環境的配置文件需放在項目的src/main/resources目錄下,命名遵循:

文件類型主配置文件(全局共享)環境專屬配置文件(環境隔離)
propertiesapplication.propertiesapplication-{profile}.properties
yamlapplication.yamlapplication-{profile}.yaml

其中,{profile}環境標識,需自定義且語義化,常見取值:

  • dev:開發環境(本地開發用)
  • test:測試環境(測試人員用)
  • prod:生產環境(線上部署用)
  • uat:預發布環境(上線前驗證用)

3. 文件結構示例

src/main/resources/
├─ application.yaml          # 主配置(所有環境共享)
├─ application-dev.yaml      # 開發環境配置
├─ application-test.yaml     # 測試環境配置
└─ application-prod.yaml     # 生產環境配置

Env 示例

????????多環境配置的核心是 “主配置共享 + 環境配置覆蓋”—— 主配置定義全局通用屬性(如應用名稱),環境配置定義該環境專屬屬性(如端口、數據庫),同名屬性會被環境配置覆蓋。

1. 代碼位置

????????請參考項目地址中 springboot-env/springboot-env-config 模塊代碼。

2. 激活指定環境

????????Spring Boot 3 支持多種激活方式,優先級從高到低如下(高優先級覆蓋低優先級):

激活方式具體用法適用場景
命令行參數(最高)啟動 Jar 時指定:
java -jar demo-app.jar --spring.profiles.active=prod
部署時動態指定環境(推薦)
JVM 參數啟動時通過-D指定:
java -Dspring.profiles.active=test -jar demo-app.jar
測試環境調試
系統環境變量配置系統變量:
SPRING_PROFILES_ACTIVE=prod(Windows/Linux 通用)
服務器全局環境配置
主配置文件(最低)application.yaml中配置:
spring.profiles.active=dev
本地開發默認環境

Env 進階

????????除了基礎的 “一環境一文件”,Spring Boot 3 還支持更靈活的配置組織方式,滿足復雜場景需求。

1. 激活多個環境

????????可同時激活多個環境,實現 “基礎配置 + 功能配置” 的拆分(如日志配置、數據庫配置拆分)。規則:后面激活的環境會覆蓋前面的同名屬性。拆分日志配置:

  1. 創建通用日志配置文件:application-log.yaml
    logging:pattern:console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
    
  2. 激活devlog環境(命令行方式):

    bash

    java -jar demo-app.jar --spring.profiles.active=dev,log
    

    此時加載順序:application.yaml?→?application-dev.yaml?→?application-log.yamllog的配置會覆蓋前兩者的同名日志屬性。

2. Profile 分組

????????當環境依賴多個子配置(如prod依賴 “數據庫配置 + 緩存配置 + 日志配置”),可通過Profile 分組簡化激活操作。分組生產環境:

????????在主配置application.yaml中定義分組:

spring:profiles:# 定義prod分組:激活prod時,自動加載prod、prod-db、prod-redisgroup:prod: prod, prod-db, prod-redistest: test, test-db  # 測試環境分組

創建子配置文件:

  • application-prod-db.yaml(生產數據庫)
  • application-prod-redis.yaml(生產緩存)

激活分組(只需指定分組名prod):

java -jar demo-app.jar --spring.profiles.active=prod

3. 外部配置文件

????????生產環境中,配置文件通常不打包進 Jar,而是放在外部目錄(方便修改)。Spring Boot 3 會自動掃描以下外部路徑(優先級從高到低):

  1. 項目根目錄下的config/文件夾
  2. 項目根目錄
  3. classpath:/config/(resources/config)
  4. classpath:/(resources,默認)

????????外部配置生產環境,將application-prod.yaml放在服務器的/opt/app/config/目錄下,啟動 Jar 時指定外部配置路徑:

java -jar demo-app.jar --spring.profiles.active=prod --spring.config.location=/opt/app/config/

Env 實踐

????????在分布式系統中,本地多環境配置無法滿足 “動態更新配置”“統一管理配置” 的需求,通常會結合配置中心(如 Nacos、Spring Cloud Config)使用:

  1. 配置中心存儲:將dev/test/prod環境的配置存儲到配置中心,按環境分組。
  2. 應用動態拉取:Spring Boot 應用啟動時,通過配置中心的地址和環境標識(如spring.cloud.nacos.config.profile=prod),動態拉取對應環境的配置。
  3. 配置動態更新:配置中心修改配置后,應用無需重啟即可實時感知更新(需開啟配置刷新機制)。

Env 注意

  1. 配置覆蓋優先級:命令行參數 > 系統環境變量 > JVM 參數 > 外部配置文件 > 內部配置文件。
  2. 避免硬編碼敏感信息:生產環境的密碼、密鑰等,不要寫在配置文件中,應通過環境變量(如${DB_PASSWORD})或配置中心加密存儲獲取。
  3. YAML 格式縮進問題:YAML 依賴縮進(2 個空格,不支持 Tab),縮進錯誤會導致配置加載失敗,需注意格式校驗。
  4. 多環境激活順序:同時激活多個環境時(如dev,log),后面的環境會覆蓋前面的同名屬性,需合理安排順序。

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

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

相關文章

利用conda打包/復刻生信環境

01、寫在前面 大家拿到自己的服務器(趁開學| 入手足夠完成碩博生涯的生信環境)后可能需要安裝很多的軟件與包,Linux中許多包的安裝依賴過多、安裝復雜。而conda作為一個能夠直接安裝超過90%軟件的"管家",能夠像Windows和手機中的應用商店那樣…

數據分析:合并

🔷 DA37:統計運動會項目報名人數(僅輸出有人報名的項目)? 題目描述給定兩個 CSV 文件:items.csv:包含項目信息(item_id, item_name, location)signup.csv:包含員工報名信…

高并發內存池(一):項目介紹和ThreadCache(線程緩存)實現

前言:本文將要介紹的高并發內存池,它的原型是Google的?個開源項?tcmalloc,全稱Thread-Caching Malloc,近一個月我將以學習為目的來模擬實現一個精簡版的高并發內存池,并對核心技術分塊進行精細剖析,分享在…

RK3399平臺ffmpeg-VPU硬編碼錄制USB攝像頭視頻、H264或MJPEG編碼

文章目錄 1 前言2 項目內容詳細說明2.0 功能2.1 工程文件夾說明 3 代碼3.1 CameraThread類3.1 CameraThreadImpl類 4 資源下載 1 前言 在某項目中需要在RK3399平臺實現USB攝像頭畫面的實時預覽、視頻錄制、拍照存儲等功能。 ??先來看需要實現的最終效果。 ?? ffmpeg USB攝…

解決藍牙耳機連win11電腦畫質依托答辯問題

以wh910n藍牙耳機為例 設置-系統-聲音-輸出(耳機)-常規(輸出點不允許)然后刪除wh910n藍牙設備 重新配對藍牙耳機

獨立顯卡和集成顯卡切換電腦卡住了怎么辦?

你是不是也遇到過這種情況——正忙著切換顯卡呢,電腦突然就卡住了,鼠標不動、屏幕定格,怎么按都沒反應?其實這種問題挺常見的,尤其是用了雙顯卡的筆記本或者工作站。別急著強制關機,嗯,咱們一步…

Java根據模版導出PDF文件

問題 工作中經常有這樣的需求,將一些數據,導出為下圖的PDF文件,那Java怎么做呢?今天手把手教你 準備模版 模版地址:https://download.csdn.net/download/ZHUSHANGLIN/91923381 修改模版使用AcrobatProPortable工具…

力扣hot100:環形鏈表(快慢指針法)(141)

一、題目描述二、思路分析這是鏈表題目中的經典問題,核心就是 如何判斷鏈表是否有環。 常見的兩種方法有:哈希表法:用一個集合存儲訪問過的節點,如果再次遇到相同節點說明有環。缺點:需要額外的空間,空間復…

AI 智能編碼工具:重塑開發效率的革命,從 GitHub Copilot 到國產新秀的全面解析

目錄 引言 一、主流智能編碼工具深度測評:從功能到實戰 1. GitHub Copilot:AI 編碼的 “開山鼻祖” 核心特性與實戰代碼 優缺點總結 2. Baidu Comate:文心大模型加持的 “國產之光” 核心特性與實戰代碼 優缺點總結 3. 通義靈碼&…

Server 13 ,CentOS 上使用 Nginx 部署多個前端項目完整指南( 支持多端口與腳本自動化 )

目錄 前言 一、實際背景 1.1 并行部署 1.2 接口代理 1.3 刷新問題 二、安裝腳本 2.1 創建腳本 2.2 不同系統 2.3 執行完成 三、配置文件 3.1 配置文件 3.2 目錄結構 3.3 重新啟動 四、驗證訪問 五、問題排查 5.1 訪問 404 5.2 接口 502 六、本文總結 6.1 清理…

2025最新:徹底解決Docker拉取鏡像超時問題

文章目錄🐳 解決 Docker 拉取鏡像超時:context deadline exceeded 完整指南(2025 親測有效)🔥 問題描述🧩 根本原因分析? 解決方案匯總? 方案 1:配置多源鏡像加速器(推薦&#xff…

小鵬汽車 vla 算法最新進展和模型結構細節

小鵬汽車在 VLA(視覺 - 語言 - 動作)算法領域的最新進展和模型結構細節,體現了其在端到端智駕系統和車端大模型部署上的技術突破。以下是基于 2025 年 9 月最新公開信息的深度解析: 一、最新進展:全場景 VLA 系統量產落…

斐波那契數列推廣

目錄 問題: 法一: 法二: 例題: 問題: 已知斐波那契數列的第一個和最后一個數字,如何求整個數列(即第二個數字) 法一: 主要是將數列拆分成兩個數列的思想 法二: 暴力…

基于STM32設計的智慧路燈(華為云IOT)_281

文章目錄 一、前言 1.1 項目介紹 【1】項目開發背景 【2】設計實現的功能 【3】項目硬件模塊組成 【4】設計意義 【5】國內外研究現狀 【6】摘要 1.2 設計思路 1.3 系統功能總結 1.4 開發工具的選擇 【1】設備端開發 【2】上位機開發 1.5 參考文獻 1.6 系統框架圖 1.7 系統原理…

實驗十 合理定義分布列實現性能優化-分布式表關聯

實驗介紹本實驗通過分析普通查詢過程中存在的性能瓶頸點,通過執行計劃的分析找到可能的性能優化點并加以實施,最終達到優化的效果,重點關注分布式關聯相關查詢語句的優化。實驗目的了解通過合理定義分布列實現分布式關聯的性能優化。實驗步驟…

C#,RabbitMQ從入門到精通,.NET8.0(路由/分布式/主題/消費重復問題 /延遲隊列和死信隊列/消息持久化 )/RabbitMQ集群模式

為什么使用消息隊列 消息隊列(MQ)在分布式系統中用于解耦生產者和消費者,提高系統的異步處理能力、削峰填谷、增強可擴展性和可靠性。通過消息隊列,任務可以異步執行,避免系統因瞬時高并發而崩潰。 消息隊列場景 異…

OpenHarmony之SELinux安全組件底層原理設計架構精講

1. 組件介紹 1.1 核心功能 **SELinux(安全增強式Linux)**是Linux歷史上杰出的安全組件,包含一組內核修改和用戶空間工具,并提供了基于安全策略的強制訪問控制機制(Mandatory Access Control,MAC)。本部件負責對文件、屬性、服務等系統資源提供強制訪問控制保護,提供n…

IIS 部署 asp.net core 項目時,出現500.19、500.31問題的解決方案

目錄 (一)500.19 問題 1. 問題說明 2. 原因 3. 解決 (二)500.31 問題 1. 問題說明 2. 原因 打開事件檢視器的3種方式: 3. 解決 (一)500.19 問題 1. 問題說明 2. 原因 Web項目發布時&am…

中大型水閘安全監測的重要性及實施方法

水閘作為水利工程體系中的關鍵性構筑物,其結構安全性和運行可靠性直接影響到整個水利系統的穩定運行,更與下游地區人民群眾的生命財產安全息息相關。作為水利樞紐工程的重要控制節點,水閘承擔著防洪排澇、灌溉供水、航運發電等多重功能&#…

【芯片設計-信號完整性 SI 學習 1.1.1 -- Unit Interval,比特周期】

文章目錄1. Unit Interval (UI) / 比特周期 的定義2. 舉例說明3. 在眼圖 (Eye Diagram) 中的體現4. 示意圖(a) 單比特周期(b) 不同速率下的 UI(c) 眼圖中的 UI5. 總結1. Unit Interval (UI) / 比特周期 的定義 在高速信號傳輸與 信號完整性 (SI) 測試中,Unit Inter…