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. 正式项目优先使用动态占位符方案。
相关推荐
SimonKing4 分钟前
震惊:怎么回事,opencode一轮对话耗尽免费额度
java·后端·程序员
装不满的克莱因瓶8 分钟前
【SpringAI Alibaba】ReactAgent响应SSE实时流式传输案例实战
java·人工智能·ai·sse·springai
杨凯凡11 分钟前
Spring Boot 文件上传怎么做才安全?流式落盘、路径校验与数据库一致性实战
java·spring boot·文件上传·后端安全·数据库一致性
张彦峰ZYF35 分钟前
功能齐了不等于能上线:智能工单系统的AI回归测试、安全防护、成本可观测与CI/CD生产部署
后端·企业智能工单系统·评测线·安全线·成本线·部署线
这个昵称不容易37 分钟前
旅游管理系统的设计与实现(SpringBoot + MySQL + Vue 前后端分离)
java·springboot·毕设
Rain的Java大神之路38 分钟前
LeetCode 37 解数独面试攻略:回溯 + 位掩码 + MRV,从暴力到毫秒级求解
java·后端·leetcode
量化分析码农1 小时前
【Python量化波动率实战 05】你的组合真的分散了吗:滚动相关与分散化收益
后端
IT_陈寒1 小时前
Vue这个奇葩的响应式问题让我加班到凌晨
前端·人工智能·后端
howard20052 小时前
Spring Boot 版成绩统计分析
spring boot·成绩统计分析
天天被压力2 小时前
【A股分钟级高频数据完全手册 #11】券商实时行情数据接口:实时交易(券商源)接入与字段
java·人工智能·python