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. 正式项目优先使用动态占位符方案。
相关推荐
云烟成雨TD1 小时前
Spring AI Alibaba 1.x 系列【52】Interrupts 中断机制:节点执行前后静态中断
java·人工智能·spring
回家路上绕了弯1 小时前
AgentScope Java实战博客:从入门到落地,解锁智能代理开发新范式
后端
疯狂成瘾者1 小时前
Spring Boot 项目中的 SMTP 邮件验证码服务技术解析
java·spring boot·后端
y = xⁿ1 小时前
Java并发八股学习日记
java·开发语言·学习
阿苟1 小时前
消息队列重点详解
后端·面试
xifangge20252 小时前
【深度排障】从 OS 底层寻址剖析 javac 不是内部或外部命令 核心报错:变量空间隔离与自动化部署终极范式
java·开发语言·jdk·自动化
RustCoder2 小时前
MangoFetch:一个用 Rust 写的 CLI/TUI 高性能的下载工具
后端·rust·开源
肖恩想要年薪百万2 小时前
JSP中常用JSTL标签
java·开发语言·状态模式
程序员清风2 小时前
AI开发岗该如何准备面试?
java·后端·面试