当前位置: 首页 > news >正文

Spring Boot Profile 多环境切换实战 —— 以 springboot-properties 为例(含踩坑)

Spring Boot Profile 多环境切换实战(springboot-properties 踩坑记录)

Spring Boot Profile 多环境切换实战 —— 以 springboot-properties 为例(含踩坑)

本文基于 springboot-learning-example 中的springboot-properties模块,记录 Spring Boot 多环境(Profile)切换的几种方式、配置优先级,以及运行测试时容易踩的两个坑。

一、项目背景

该模块演示用@ConfigurationProperties绑定自定义配置,并通过 Profile 区分开发(dev)与生产(prod)环境。启动类Application.java实现了CommandLineRunner,启动时会打印HomePropertiesHelloWorldController/返回 "Hello,World!"。

二、Spring Boot Profile 是什么

Profile 是 Spring 提供的「按环境隔离配置」的机制。核心约定:

  • 主配置文件:application.properties
  • 环境专属文件:application-{profile}.properties(如application-dev.propertiesapplication-prod.properties
  • 通过spring.profiles.active指定激活哪个环境

三、本项目的多环境配置

application.properties(主,指定激活环境)

# Spring Profiles Active spring.profiles.active=prod

application-dev.properties(开发环境)

## 家乡属性 Dev home.province=ZheJiang home.city=WenLing home.desc=dev: I'm living in ${home.province} ${home.city}.

application-prod.properties(生产环境)

## 家乡属性 Prod home.province=ZheJiang home.city=WenLing home.desc=prod: I'm living in ${home.province} ${home.city}.

dev 与 prod 仅home.desc前缀不同(dev:/prod:),这正是用来验证当前激活环境的「标记」。

四、4 种切换环境的方式

优先级(高 → 低):命令行参数 / 环境变量 > 主配置文件 > 默认值。下面 4 种方式任选其一即可。

方式 1:修改主配置文件(最常用,随代码提交)

# application.properties spring.profiles.active=dev # 改成 dev / prod 即可

方式 2:运行 Jar 时传命令行参数(不改动文件,推荐部署用)

java -jar target/springboot-properties-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod

方式 3:Maven 插件启动时指定(开发调试用)

mvn spring-boot:run -Dspring-boot.run.profiles=prod

方式 4:环境变量(容器 / 服务器部署最常用)

# Linux / macOS export SPRING_PROFILES_ACTIVE=prod # Windows set SPRING_PROFILES_ACTIVE=prod

五、优先级速查表

方式示例优先级适用场景
命令行参数--spring.profiles.active=prod最高临时验证、部署
环境变量SPRING_PROFILES_ACTIVE=prodDocker / K8s
主配置文件spring.profiles.active=prod随代码固定
默认值最低兜底
提示:高优先级的配置会「覆盖」低优先级,所以命令行/环境变量设了 prod,就算文件里写 dev 也会生效 prod。

六、如何验证当前环境生效

启动应用后看两处:

  1. 控制台打印的HomePropertiesdesc字段 —— 带dev:还是prod:前缀。
  2. 或浏览器访问http://localhost:8080/,确认接口正常返回。
HomeProperties{province='ZheJiang', city='WenLing', desc='prod: I'm living in ZheJiang WenLing.'}

七、附:运行测试时的两个隐藏坑

坑 A:mvn test测试被悄悄跳过

pom 里maven-surefire-plugin写死了<skipTests>true</skipTests>。这个值是写在<configuration>里的字面量,命令行-DskipTests=false根本覆盖不了,导致测试一直被跳过。

解决:把 pom 中skipTests改为false

坑 B:运行 @SpringBootTest 报 NoSuchMethodError

pom 里硬编码了spring-boot-test:1.4.2.RELEASE,与父依赖spring-boot 2.1.3.RELEASE冲突,运行时抛NoSuchMethodError: SpringApplication.<init>(java.lang.Object[])

解决:删除这个冗余依赖,spring-boot-starter-test已经带正确版本。

修复后运行单个测试方法的命令:

cd springboot-properties mvn test -Dtest=PropertiesTest#getHomeProperties

八、总结

  • 切换环境本质就是改spring.profiles.active,4 种方式按场景选。
  • 优先级记住一句话:命令行 > 环境变量 > 配置文件
  • home.desc前缀这个「标记」快速验证环境是否真的切换成功。
  • 跑测试前先确认 pom 没把skipTests写死、没引冲突的老版本依赖。
http://www.jsqmd.com/news/1249699/

相关文章:

  • 零基础小白如何去SRC平台挖漏洞赚钱?全网最全最强的干货教程一定要收藏!
  • 深入解析PWM模块:从计数器模式、死区生成到多通道同步机制
  • 批量自动化任务应该选择 Token 还是 Credit 套餐?
  • 深入解析Tiva TM4C129X时钟与电源管理:从PLL、LDO到低功耗唤醒实战
  • OpenClaw三层记忆架构与动态上下文管理解析
  • 深入解析TI ePWM事件触发与故障保护机制:从寄存器到电机控制实战
  • WAIC 2026|西部数据揭示AI存储新范式:AI不仅是计算,更是数据
  • 2026上海奢侈品包包回收深度行业解析|市场新规、行情底层逻辑、避坑体系、正规机构实测全攻略 - 大鱼奢侈品
  • 2026大模型智能体(Agent)面试全攻略与架构解析
  • Python毕设项目:基于 Python 的智能期货模拟交易分析系统 虚拟资金期货交易演练管理平台 (源码+文档,讲解、调试运行,定制等)
  • 鸿蒙 PC Markdown 编辑器千文件工作区压力测试
  • 具身智能进入“干活时代“:从展台演示到真实部署,数据才是核心瓶颈
  • 2026年GEO选型必看:全栈自研与媒体分发路径大揭秘
  • 大模型输出不确定性的工程解决方案
  • 2026年上海普陀区管道疏通避坑指南:快达师傅上门快不乱收费 - 余生黄金回收
  • Gino同传带练小伙伴Dora第12天,介入无稿同传练习第1天。Gino同传带练,每个小伙伴的基础不同情况不一样,有针对性地安排先练哪一项。有的可能先练视译,有的可能先练有稿同传,有的可能先练无稿
  • 蜗牛星际+OpenWrt实战:双网口软路由秒变AP,局域网设备无缝互通指南
  • 医疗设备全生命周期管理系统+学前领先+智慧医院高效运营的核心助力​
  • Profinet--TIAPortal V19安装与项目实战指南
  • 别让科研 Agent 直接从 Chunk 跳到结论:为什么 metadata layer 才是第一道防线
  • 0 基础入门React Native鸿蒙跨平台开发:体重单位转换器功能实战
  • TM4C129XNCZAD GPIO深度解析:从寄存器配置到实战避坑指南
  • 软路由玩家必看:在PVE7.3上实现iKuai+OpenWRT双路由+NAS+Win10的5个性能优化技巧
  • Python计算机毕设之基于 Python 的校园二手社交交易平台实现校园二手物品问答互动与交易系统设计 (完整前后端代码+说明文档+LW,调试定制等)
  • 【C++】多态(虚函数/虚函数表/菱形)
  • 树莓派4B变身软路由全攻略:从OpenWrt刷机到双网卡配置避坑指南
  • 2026 海南海口 OPC 公司注册收费标准,封关后地址、代办、税务全成本明细 - 米諾
  • 本地隐私 AI 工具 OpenClaw ,Windows/Mac 新手全流程安装 + 故障排查汇总
  • 脑筋急转弯API调用边界与QPS限制解析:20并发下的稳定性实践
  • 大连名表回收哪家价高?本地商家实测对比 - 大牌深度测评