SpringBoot 多環境配置

在實際項目開發中,不同環境往往有不同的配置需求:

  • 開發環境(dev):本地調試,連接測試數據庫;
  • 測試環境(test):接口聯調,接近真實場景;
  • 生產環境(prod):性能穩定,關閉調試信息。

一、什么是多環境配置?

Spring Boot 支持通過?application-{profile}.yml?來定義多個環境下的配置文件,然后通過激活不同的?profile,切換當前應用使用的配置。

常見環境劃分

環境用途
dev本地開發環境
test聯調/測試環境
prod正式上線環境
uat用戶驗收環境(可選)

二、多環境配置的結構設計

推薦采用如下結構組織配置文件:

src/  
└── main/  
└── resources/  
├── application.yml  
├── application-dev.yml  
├── application-test.yml  
└── application-prod.yml

各文件職責

  • application.yml通用配置,所有環境共享;
  • application-dev.yml:開發環境特有配置;
  • application-test.yml:測試環境配置;
  • application-prod.yml:生產環境配置;

三、如何激活環境配置

方式一:在?application.yml?中設置

spring:  profiles:  active:?dev

方式二:命令行參數指定(常用于部署)

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

方式三:IDE 配置 VM 參數

在運行配置中添加:

-Dspring.profiles.active=dev

四、配置繼承與覆蓋邏輯

Spring Boot 啟動時的配置加載順序為:

  1. application.yml(通用配置);
  2. application-{profile}.yml(根據激活 profile 加載);
  3. 命令行參數 > 環境變量 > profile 文件內容

??profile 文件會覆蓋主配置文件中的同名字段。

五、實戰示例:開發 vs 測試 vs 生產配置對比

1. application.yml(通用配置)

spring:  application:  name: my-app  datasource:  driver-class-name: com.mysql.cj.jdbc.Driver

2. application-dev.yml

spring:  datasource:  url: jdbc:mysql://localhost:3306/dev_db  username: dev_user  password: 123456  thymeleaf:  cache: false  # 開發時關閉緩存

3. application-test.yml

spring:  datasource:  url: jdbc:mysql://localhost:3306/test_db  username: test_user  password: 654321

4. application-prod.yml

spring:  datasource:  url: jdbc:mysql://192.168.1.100:3306/prod_db  username: prod_user  password: prod_password  thymeleaf:  cache: true  logging:  level:  root: info

六、環境切換中的常見問題與解決方案

問題一:配置未生效?

排查點:

  • spring.profiles.active?是否配置正確;
  • 環境配置文件是否命名準確(如?application-dev.yml);
  • 是否被其它配置(命令行/環境變量)覆蓋。

問題二:IDE 啟動環境總是?default

在 IDEA 中運行時,如果沒有配置 VM 參數或 YAML 設置,默認使用的是?application.yml,不包含子 profile。

-Dspring.profiles.active=dev

問題三:打包部署時 profile 無法切換?

當你將應用打成 jar 包后上傳服務器,建議通過?命令行方式?激活 profile:

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

或者寫入?application.properties?覆蓋默認激活配置:

spring.profiles.active=prod

問題四:不想分太多文件,可以使用 profile 分段寫法

Spring Boot 支持使用 YAML 中的?---?語法來在一個文件中定義多個 profile:

spring:  application:  name: my-app  ---  
spring:  config:  activate:  on-profile: dev  datasource:  url: jdbc:mysql://localhost:3306/dev_db  ---  
spring:  config:  activate:  on-profile: prod  datasource:  url: jdbc:mysql://localhost:3306/prod_db

七、進階技巧:結合 @Profile 注解使用

在代碼中我們可以通過?@Profile?注解控制 Bean 的加載:

@Configuration  
@Profile("dev")  
public class DevDataSourceConfig {  // dev 環境下的數據源配置  
}
@Configuration  
@Profile("prod")  
public class ProdDataSourceConfig {  // prod 環境下的數據源配置  
}

???注意:未被激活的 profile 中的 Bean 不會被加載。

八、部署建議與最佳實踐

建議說明
拆分配置文件每個環境單獨管理,清晰明確
生產配置不要上傳代碼倉庫密碼信息敏感,建議放置服務器本地配置
使用命令行指定 profile靈活、避免被代碼覆蓋
開發階段關閉緩存便于調試,如 Thymeleaf
生產階段提高日志等級避免輸出大量調試信息

九、總結

  • Spring Boot 提供了強大靈活的多環境配置能力;
  • 推薦使用?application-{profile}.yml?結構劃分配置;
  • 激活方式可通過?application.yml、命令行參數、VM 參數等;
  • 結合?@Profile?注解可實現 Bean 的按需加載;
  • 合理配置有助于保障開發、測試和生產環境各自的穩定性和安全性。

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

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

相關文章

延凡智慧醫院數字孿生平臺

延凡智慧醫院數字孿生平臺是延凡科技依托物聯網、數字孿生、AI 算法及邊緣計算技術打造的醫療場景全要素數字化解決方案,通過構建醫院物理實體與虛擬空間的實時映射,實現醫療資源優化、運營效率提升及患者體驗升級。一、平臺價值(一&#xff…

談談WebAssembly、PWA、Web Workers的作用和場景

WebAssembly、PWA 和 Web Workers 是現代 Web 開發中提升性能、擴展能力的重要技術,各自解決不同場景的問題,以下結合實際使用經驗分析:一、WebAssembly(Wasm):高性能代碼執行作用:WebAssembly …

嵌入式第十八課!!數據結構篇入門及單向鏈表

在前幾章對C語言的學習中,我們學到了:基本的C語法和簡單算法面向過程的編程思想而在數據結構這一篇章,我們將要學習:常用的數據存儲結構算法面向對象的編程思想數據結構在正式開始學習之前,我們先來了解一下什么是數據…

win10任務欄出問題了,原來是wincompressbar導致的

問題描述兄弟們客戶說自己電腦現在有問題了,任務欄顯示的都不對,和之前的都不一樣,現在使用起來非常難受,我們來看一下,這到底是什么問題吧!到客戶現場,查看發現,客戶桌面系統最底下…

FFmpegHandler 功能解析,C語言程序化設計與C++面向對象設計的核心差異

FFmpegHandler 功能解析 本文件記錄了關于 FFmpegHandler 類中核心函數工作流程的詳細解釋。Q: FFmpeg逐幀解碼,FFmpegHandler::openVideo 和 FFmpegHandler::readAVFrame 這兩個函數都分別做了什么? A: 可以把整個過程想象成“準備播放一部電影”&#…

Codeforces Round 1039 (Div. 2) A-C

A. Recycling Center題目大意 給你n個垃圾袋,每個垃圾袋有一個重量 在每秒鐘,你可以選擇一個垃圾袋,如果他的重量小于等于c,那么你可以不花費硬幣丟掉它 當你丟掉一個垃圾袋后,其他垃圾袋在這一秒重量會翻倍 問最少花費…

【設計模式】 原則

單一職責原則 對于一個類而言,有且僅有一個引起他變化的原因或者說,一個類只負責一個職責 如果一個類承擔的職責過多,那么這些職責放在一起耦合度太高了,一個職責的變化可能會影響這個類其他職責的能力。 所以我們在做軟件設計的時…

windows11右鍵菜單新增項增加drawio文件,使用draw.io

目錄1.新建空白模板2.建立注冊表文件1.新建空白模板 這里我們的模板文件路徑為 D:\Software\drawio\template.drawio 2.建立注冊表文件 首先新建一個.txt文件,我這里取名為menulize.txt,然后將下面的內容復制到.txt文件中 Windows Registry Editor Ver…

解鎖網頁魔法:零基礎HTML通關秘籍

文章目錄**解鎖網頁魔法:零基礎HTML通關秘籍**HTML 基礎目標HTML 結構認識 HTML 標簽HTML 文件基本結構標簽層次結構快速生成代碼框架HTML 常見標簽注釋標簽注釋的原則標題標簽: h1-h6段落標簽: p換行標簽:br綜合案例: 展示博客超鏈接標簽: a表格標簽**基…

類似 Pixso 但更側重「網頁 / 軟件界面設計」「前后端可視化開發」的工具

從 GoView 的 Demo 功能來看,它主要聚焦于數據可視化大屏的低代碼搭建,更側重數據圖表配置和頁面布局,沒有類似 Pixso 的在線 UI 設計(如矢量繪圖、組件樣式精細化設計)功能,其核心是通過預設組件快速構建數…

MySQL--組從復制的詳解及功能演練

2.MySQL的組從復制 2.1 配置mastesr [rootmysqlaa ~]# vim /etc/my.cnf [mysqld] server-id10 datadir/data/mysql socket/data/mysql/mysql.sock default_authentication_pluginmysql_native_password log-binmysql-bin[rootmysqlaa ~]# /etc/init.d/mysqld restart# 進入數據…

JavaScript將String轉為base64 筆記250802

JavaScript將String轉為base64 筆記250802 在 JavaScript 中將字符串轉換為 Base64 編碼有多種方法,每種方法都有其適用場景。下面我將全面介紹這些方法,包括處理 ASCII 字符、Unicode 字符以及性能優化方案。 基礎方法:btoa() 基本用法&a…

Unity3D數學第四篇:射線與碰撞檢測(交互基礎篇)

Unity3D數學第一篇:向量與點、線、面(基礎篇) Unity3D數學第二篇:旋轉與歐拉角、四元數(核心變換篇) Unity3D數學第三篇:坐標系與變換矩陣(空間轉換篇) Unity3D數學第…

數據處理和統計分析——09 數據分組

1 聚合 1.1 簡介 在SQL中我們經常使用GROUP BY將某個字段,按不同的取值進行分組,在Pandas中也有groupby()函數;分組之后,每組都會有至少1條數據,將這些數據進一步處理返回單個值的過程就是聚合,比如分組之后…

【數據結構與算法】數據結構初階:排序內容加餐(一)——快速排序:三路劃分、自省排序

🔥個人主頁:艾莉絲努力練劍 ?專欄傳送門:《C語言》、《數據結構與算法》、C語言刷題12天IO強訓、LeetCode代碼強化刷題 🍉學習方向:C/C方向 ??人生格言:為天地立心,為生民立命,為…

MySqL(加餐)

范式第一范式數據庫表的每一列都是不可分割的原子數據項,而不能是集合,數組,對象等非原子數據。在關系型數據庫的設計中,滿足第一范式是對關系模式的基本要求。不滿足第一范式的數據庫就不能被稱為關系數據庫。第一范式實際上只要…

【redis】基于工業界技術分享的內容總結

Redis 實踐指南與核心概念 一、Java 中常用的 Redis 使用場景與實踐 緩存(Caching) 場景:熱點數據、頻繁訪問的數據,如商品詳情、用戶信息。通過緩存減少數據庫壓力,提高系統響應速度。 工業界實踐: 淘寶…

服務端之nestJS常用異常類及封裝自定義響應模塊

MENU前言常用異常類(由nestjs/common提供)示例自定義異常(可選)自定義響應模塊前言 在NestJS中,nestjs/common提供了大量的內置異常類,主要用于在控制器、服務等層拋出特定的HTTP錯誤響應。 常用異常類&…

數據鏈路層、NAT、代理服務、內網穿透

目錄 一. 以太網 以太網幀格式 二. MAC地址 三. MTU 四. ARP協議 五. NAT NAPT 六. 代理服務器 正向代理 反向代理 七. 內網穿透 八. 內網打洞 一. 以太網 ? "以太網" 不是一種具體的網絡, 而是一種技術標準; 既包含了數據鏈路層的內 容, 也包含了一些物理層…

Rust在CentOS 6上的移植

Rust已不支持Cent OS 6 rhel是Redhat 發布的Red Hat Enterprise Linux的簡稱,使用rhel源代碼編譯的CentOS,最新的版本是CentOS 7,于2024年停止支持。而更古老的CentOS 6,則在2020年就已經結束了。 而面對如此老舊的系統&#xf…