Spring Boot 两种激活配置方式的作用与区别

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 构建工具的占位符值不是写死的 ,而是由构建工具动态注入

工作原理

  1. 你在 pom.xml(Maven)或 build.gradle(Gradle)中配置环境参数;
  2. 项目打包 / 启动时,构建工具会把 @profiles.active@ 替换成真实的环境值(dev/test/prod);
  3. 最终运行的配置是动态的,不用修改 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 一键切换) 不支持(只能用一个环境)
生产环境 推荐使用(标准化、自动化) 禁止使用(容易误上线)
耦合性 配置与代码解耦 配置与代码强耦合

三、关键补充说明

  1. 语法区别

    • @xxx@Maven 专属占位符 (Gradle 用 ${xxx});
    • 纯 Spring Boot 不识别 @xxx@必须配合构建工具使用
  2. 优先级命令行 > 占位符动态注入 > 配置文件写死值

    java 复制代码
    # 命令行参数优先级最高,会覆盖所有配置
    java -jar app.jar --spring.profiles.active=prod
  3. 企业规范 正式项目必须用 @profiles.active@ ,禁止用写死的 dev,避免开发配置上线到生产环境。


总结

  1. @profiles.active@动态、灵活、企业级标准,配合 Maven 实现多环境一键切换;
  2. dev静态、简单、仅适合本地开发,切换环境必须改代码;
  3. 正式项目优先使用动态占位符方案。
相关推荐
北斗落凡尘18 分钟前
LangGraph 入门实战(7)
后端·langchain
天疆说21 分钟前
01 硬件选型与 llama.cpp 部署:4× RTX 5880 Ada 跑 DeepSeek-V4-Flash
java·redis·llama
uzong34 分钟前
业务新老系统数据迁移-负责人经验总结和复盘
后端
水无痕simon1 小时前
3 短信应用场景以及平台架构
java·服务器
dogstarhuang1 小时前
大模型 API 停服怎么办:用 API 网关实现多模型统一接入与可切换架构
人工智能·后端·架构·大模型·api·数字化转型·ai应用
mister_guo1 小时前
JVM 内存管理原理及生产配置实战:从“参数能启动”到“内存可控”
java·jvm
风流 少年1 小时前
Spring AI 2.0:Tool
java·python·spring
程序猿DD1 小时前
OctaFuse Gateway 2.5.0:接入 Responses 端点、更易理解的路由配置
后端·agent
爱敲键盘的猴子2 小时前
Java Spring -- 声明式事务控制
java·spring·事务控制
爱编程的小新☆2 小时前
【LeetCode】从递归到 Flood Fill:5 道题吃透 DFS 的选择、回溯与标记
java·算法·leetcode·深度优先·回溯·flood fill