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. 正式项目优先使用动态占位符方案。
相关推荐
fangdengfu12310 分钟前
ES分析系统各个服务日志占用量
java·前端·elasticsearch
追逐时光者14 分钟前
精选 5 款基于 .NET 开源免费、功能强大的 Windows 系统优化工具
后端·.net
云烟成雨TD33 分钟前
Spring AI 1.x 系列【51】可观测性技术选型
java·人工智能·spring
星越华夏34 分钟前
ESP32-CAM图像传输项目说明文档
java·后端·struts·esp32
Jinkxs1 小时前
Java 跨域14-Java 与区块链(Hyperledger)集成
java·开发语言·区块链
JustHappy2 小时前
古法编程秘籍(六):程序到底是怎么跑起来的?从 IO 到中断,一次讲明白
前端·后端·全栈
晨曦中的暮雨2 小时前
Golang速通(Javaer版)
java·开发语言·后端·golang
七老板的blog2 小时前
当 Spring StateMachine 遇见大模型:构建工业级 AI 写作流水线
java·人工智能·spring
云烟成雨TD3 小时前
Spring AI 1.x 系列【46】MCP Security 模块
java·人工智能·spring
CRMEB系统商城3 小时前
CRMEB多商户系统(Java)v2.3公测版发布
java·开发语言·人工智能·小程序·开源·php