Spring Boot 两种激活配置方式的作用与区别
这两种写法都是 Spring Boot 激活配置文件 的核心方式,核心区别是:一个是动态占位符(灵活可变),一个是写死的固定值(静态不变)。
先明确基础:Spring Boot 中 spring.profiles.active 的作用是指定当前生效的环境配置 ,比如 dev(开发)、test(测试)、prod(生产),对应加载 application-dev.yml/application-test.yml 等配置文件。
一、两种写法详细解析
1. active: @profiles.active@
java
spring:
profiles:
active: @profiles.active@
核心作用
这是 Maven/Gradle 构建工具的占位符 ,值不是写死的 ,而是由构建工具动态注入。
工作原理
- 你在
pom.xml(Maven)或build.gradle(Gradle)中配置环境参数; - 项目打包 / 启动时,构建工具会把
@profiles.active@替换成真实的环境值(dev/test/prod); - 最终运行的配置是动态的,不用修改 YML 文件。
适用场景
多环境统一配置、自动化打包:
- 开发时打包用
dev - 测试服务器打包用
test - 生产服务器打包用
prod - 一套配置文件,通过构建命令切换环境,不用手动改代码
示例(Maven)
pom.xml 中定义配置:
java
<profiles>
<!-- 开发环境 -->
<profile>
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!-- 生产环境 -->
<profile>
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
</properties>
</profile>
</profiles>
启动 / 打包命令切换环境:
java
# 开发环境
mvn spring-boot:run -Pdev
# 生产环境
mvn clean package -Pprod
2. active: dev
XML
spring:
profiles:
active: dev
核心作用
静态硬编码 :直接把激活的环境固定写死为 dev,代码不改,环境永远不变。
工作原理
- 纯 Spring Boot 原生配置,和构建工具无关;
- 项目启动后,强制只加载
application-dev.yml配置; - 想切换环境,必须手动修改 YML 文件。
适用场景
- 本地单人开发测试
- 简单小项目,不需要多环境切换
- 临时调试使用
二、核心区别总结表
表格
| 维度 | active: @profiles.active@ |
active: dev |
|---|---|---|
| 类型 | 动态占位符(Maven/Gradle) | 静态固定值 |
| 值来源 | 构建工具动态注入 | 代码写死 |
| 切换方式 | 命令 / 构建配置切换,无需改代码 | 手动修改 YML 文件 |
| 多环境支持 | 完美支持(dev/test/prod 一键切换) | 不支持(只能用一个环境) |
| 生产环境 | 推荐使用(标准化、自动化) | 禁止使用(容易误上线) |
| 耦合性 | 配置与代码解耦 | 配置与代码强耦合 |
三、关键补充说明
-
语法区别
@xxx@是 Maven 专属占位符 (Gradle 用${xxx});- 纯 Spring Boot 不识别
@xxx@,必须配合构建工具使用。
-
优先级命令行 > 占位符动态注入 > 配置文件写死值
java# 命令行参数优先级最高,会覆盖所有配置 java -jar app.jar --spring.profiles.active=prod -
企业规范 正式项目必须用
@profiles.active@,禁止用写死的dev,避免开发配置上线到生产环境。
总结
@profiles.active@:动态、灵活、企业级标准,配合 Maven 实现多环境一键切换;dev:静态、简单、仅适合本地开发,切换环境必须改代码;- 正式项目优先使用动态占位符方案。