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.properties、application-prod.properties通过spring.profiles.active指定激活哪个环境三、本项目的多环境配置application.properties主指定激活环境# Spring Profiles Active spring.profiles.activeprodapplication-dev.properties开发环境## 家乡属性 Dev home.provinceZheJiang home.cityWenLing home.descdev: Im living in ${home.province} ${home.city}.application-prod.properties生产环境## 家乡属性 Prod home.provinceZheJiang home.cityWenLing home.descprod: Im living in ${home.province} ${home.city}.dev 与 prod 仅home.desc前缀不同dev:/prod:这正是用来验证当前激活环境的「标记」。四、4 种切换环境的方式优先级高 → 低命令行参数 / 环境变量 主配置文件 默认值。下面 4 种方式任选其一即可。方式 1修改主配置文件最常用随代码提交# application.properties spring.profiles.activedev # 改成 dev / prod 即可方式 2运行 Jar 时传命令行参数不改动文件推荐部署用java -jar target/springboot-properties-0.0.1-SNAPSHOT.jar --spring.profiles.activeprod方式 3Maven 插件启动时指定开发调试用mvn spring-boot:run -Dspring-boot.run.profilesprod方式 4环境变量容器 / 服务器部署最常用# Linux / macOS export SPRING_PROFILES_ACTIVEprod # Windows set SPRING_PROFILES_ACTIVEprod五、优先级速查表方式示例优先级适用场景命令行参数--spring.profiles.activeprod最高临时验证、部署环境变量SPRING_PROFILES_ACTIVEprod高Docker / K8s主配置文件spring.profiles.activeprod中随代码固定默认值无最低兜底提示高优先级的配置会「覆盖」低优先级所以命令行/环境变量设了 prod就算文件里写 dev 也会生效 prod。六、如何验证当前环境生效启动应用后看两处控制台打印的HomeProperties中desc字段 —— 带dev:还是prod:前缀。或浏览器访问http://localhost:8080/确认接口正常返回。HomeProperties{provinceZheJiang, cityWenLing, descprod: Im living in ZheJiang WenLing.}七、附运行测试时的两个隐藏坑坑 Amvn test测试被悄悄跳过pom 里maven-surefire-plugin写死了skipTeststrue/skipTests。这个值是写在configuration里的字面量命令行-DskipTestsfalse根本覆盖不了导致测试一直被跳过。解决把 pom 中skipTests改为false。坑 B运行 SpringBootTest 报 NoSuchMethodErrorpom 里硬编码了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 -DtestPropertiesTest#getHomeProperties八、总结切换环境本质就是改spring.profiles.active4 种方式按场景选。优先级记住一句话命令行 环境变量 配置文件。用home.desc前缀这个「标记」快速验证环境是否真的切换成功。跑测试前先确认 pom 没把skipTests写死、没引冲突的老版本依赖。

相关新闻

AI行业人才需求变化与职业发展策略

AI行业人才需求变化与职业发展策略

1. 为什么AI公司正在低调扩张 最近半年,我注意到一个有趣的现象:不少AI领域的创业公司都在悄悄扩编,招聘信息既不挂在官网也不发在主流招聘平台,而是通过行业小圈子或者猎头定向推送。这种"静默招聘"现象背后&#xff0…

2026/7/23 19:36:56 阅读更多 →
基于GFL_R101_FPN的肠球菌自动检测系统开发

基于GFL_R101_FPN的肠球菌自动检测系统开发

1. 项目背景与核心价值肠球菌检测在医疗诊断、食品安全和环境监测等领域具有重要应用价值。传统检测方法通常依赖人工镜检或培养法,存在耗时长、主观性强等局限性。我们基于GFL_R101_FPN_MS-2x_COCO模型开发的自动检测系统,将目标检测技术引入微生物识别…

2026/7/23 19:36:56 阅读更多 →
从思科到软路由:深入理解网络世界的两种维度与身份

从思科到软路由:深入理解网络世界的两种维度与身份

最近刚研究了不少软路由相关的东西,回想起大学课程中有一门和网络工程师相关的思科网络的课程,从RIP协议到OSPF协议,分析网络拓扑图,给交换机路由器敲命令,我还记得那熟悉的命令ip running config,看似它们…

2026/7/23 19:36:56 阅读更多 →

最新新闻

OpenWrt x86平台PCIe配置实战:从零搭建高性能软路由

OpenWrt x86平台PCIe配置实战:从零搭建高性能软路由

你是否曾经遇到过这样的困扰:购买的PCIe设备在OpenWrt x86平台上无法识别,或者性能远不如预期?🤔 别担心,今天我们就来彻底解决这些问题!通过本文的实战指南,你将学会如何轻松配置各种PCIe设备&…

2026/7/23 19:50:18 阅读更多 →
【单片机毕业设计推荐】 基于 STM32 的智能恒温除湿消毒柜控制系统设计与实现,基于 STM32 的物联网智能柜体环境监测与调控系统设计(013003)

【单片机毕业设计推荐】 基于 STM32 的智能恒温除湿消毒柜控制系统设计与实现,基于 STM32 的物联网智能柜体环境监测与调控系统设计(013003)

文章目录20 个相关毕业设计备选题目项目研究背景摘要总体方案核心功能一、基础感知功能二、本地模式控制核心功能三、远程蓝牙通信功能技术路线项目演示关于我们项目案例源码获取博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业&#x1f6…

2026/7/23 19:50:18 阅读更多 →
【Autosar从入门到精通到进阶实战篇】79 0x36传输数据:刷写的高速公路

【Autosar从入门到精通到进阶实战篇】79 0x36传输数据:刷写的高速公路

79 0x36传输数据:刷写的高速公路 开篇故事:卡在“数据发送中”的深夜 去年冬天,我帮一家Tier1调试一个OTA刷写问题。ECU是恩智浦的S32K144,UDS刷写流程走到0x34请求下载时一切正常——ECU返回了正响应,给出了最大块长度(MaxNumberOfBlockLength)和块大小(BlockSize)…

2026/7/23 19:50:18 阅读更多 →
【Autosar从入门到精通到进阶实战篇】77 0x27安全访问:刷写的守门员

【Autosar从入门到精通到进阶实战篇】77 0x27安全访问:刷写的守门员

77 0x27安全访问:刷写的守门员 上回我们聊了0x31例程控制,你学会了擦除、写入、校验的时序铁律。但有个问题一直悬着:谁来保证只有“合法”的诊断仪才能执行这些危险操作? 去年我就亲眼见过一个惨案:某供应商的测试脚本,因为安全访问种子算法写错了一个字节,导致产线上…

2026/7/23 19:50:18 阅读更多 →
【Autosar从入门到精通到进阶实战篇】76 0x31例程控制:刷写中的擦除与校验

【Autosar从入门到精通到进阶实战篇】76 0x31例程控制:刷写中的擦除与校验

76 0x31例程控制:刷写中的擦除与校验 开篇故事 老张蹲在测试台前,盯着DET(默认错误跟踪器)的Log已经半小时了。他负责的Bootloader刷写流程,明明0x34请求下载、0x36传输数据、0x37请求退出都返回了正响应,可ECU重启后就是跑不起来。更诡异的是,同样的刷写文件,隔壁组…

2026/7/23 19:50:18 阅读更多 →
1.2 amdgpu_bo的设计分析 — gem层和ttm层

1.2 amdgpu_bo的设计分析 — gem层和ttm层

接下来的两篇我们对AMD KFD中使用的 BO 涉及的概念和结构体作了一个整体的分析,内容较多,偏理论一些,可以和后面的文章反复对照。如果你对drm系统还不熟悉,那先理解drm框架,可以参见:linux DRM 子系统专栏介绍。不管有没有基础,该文都是一个参考性的文档,不必都理解。 …

2026/7/23 19:49:18 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻