Spring Boot 的亮点之一在于,你可以在不修改任何 Java 代码和配置文件的前提下,轻松切换不同的运行环境。只需准备几个专属的配置文件——比如 application-dev.yml、application-test.yml、application-prod.yml,将各环境的差异化配置(端口、数据库地址、日志级别等)放入其中,然后通过命令行参数 --spring.profiles.active、IDEA 的 Active profiles、Maven 的 -Dspring-boot.run.profiles,甚至直接设置操作系统环境变量 SPRING_PROFILES_ACTIVE,即可动态激活对应的环境。

项目上线前,在开发、测试、生产环境之间反复切换配置是常见需求。如果每次都要手动修改 application.yml 再打包,不仅容易出错,还违背 CI/CD 的规范。真正理想的方案是:不动任何 Java 代码和配置文件内容,一键完成环境切换。
准备环境专用配置文件
在 src/main/resources 目录下创建三个独立文件:application-dev.yml、application-test.yml、application-prod.yml。每个文件只写入对应环境的差异化配置,比如端口、数据库 URL、日志级别。
有一点需要特别注意:不要在这些文件里重复写 server.servlet.context-path 这类通用配置——它们必须保留在 application.yml 里,否则激活 profile 后基础设置会丢失。
确认 application.yml 中只保留公共配置,并包含这行:spring.profiles.active: default。这行只是占位符,实际不会生效,但能避免启动时报错。
通过 IDEA 启动器切换环境
方法一:在 Run Configuration → Program arguments 栏输入 --spring.profiles.active=prod,直接覆盖所有其他激活方式。
方法二:在 Run Configuration → Active profiles 栏填写 test(注意这里不加 -- 前缀,也不写 spring.profiles.active=),IDEA 会自动将它注入为 JVM 参数。
⚠️ 关键提醒:如果同时设置了 Program arguments 和 Active profiles,前者优先级更高,后者会被忽略。
用 Maven 命令行一键切换
第一步:确保 pom.xml 中已启用 Maven profiles 插件支持,且没有硬编码 spring.profiles.active 到 properties 块里。
第二步:执行 mvn spring-boot:run -Dspring-boot.run.profiles=dev,此时 JVM 系统属性生效,优先级高于 application.yml 中的设置。
第三步:打包时用 mvn clean package -Pprod,前提是 pom.xml 中已定义 并绑定 spring-boot.run.profiles 属性。这种方式生成的 jar 包自带环境标识,无需额外参数。
注意:-P 参数触发的是 Maven profile,它本身不直接影响 Spring Boot,必须配合内部属性映射才起作用;若未做映射,-Pprod 不会让 Spring 加载 application-prod.yml。
靠操作系统环境变量永久生效
Linux/macOS 下执行:export SPRING_PROFILES_ACTIVE=prod,然后运行 java -jar app.jar。
Windows PowerShell 中执行:$env:SPRING_PROFILES_ACTIVE="test",再启动 jar 包。
这个变量一旦设好,所有后续启动的 Spring Boot 应用都会默认读取对应 profile,除非被更高优先级的命令行参数覆盖。
