news 2026/4/15 16:17:22

SpringBoot 使用 spring.profiles.active 来区分不同环境配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringBoot 使用 spring.profiles.active 来区分不同环境配置

很多时候,我们项目在开发环境和生产环境的配置是不一样的,例如,数据库配置,在开发的时候,我们一般用测试数据库,而在生产环境,我们要用生产数据库,这时候,我们可以利用 profile 在不同的环境下配置用不同的配置文件或者不同的配置。

Spring Boot 允许你通过命名约定按照一定的格式 (application-{profile}.properties) 来定义多个配置文件,然后通过在 application.properties 通过 spring.profiles.active 来具体激活一个或者多个配置文件,如果没有指定任何 profile 的配置文件,Spring Boot 默认会启动 application-default.properties。

一、具体配置实现方法参考如下
  1. 在 application.properties 文件的同路径下,创建不同的环境参数文件,命名格式为:application-{profile}.properties,其中 {profile} 对应环境标识。

如上图所示,项目共配置了三个不同的环境,分别为:

  • application-dev.properties:开发环境
  • application-test.properties:测试环境
  • application-prod.properties:生产环境

至于哪个具体的配置文件会被加载,需要在 application.properties 文件中通过 spring.profiles.active 属性来设置,其值对应 {profile} 值。

  1. 修改 application.properties 文件内容,指定生效的环境,内容如下。

    spring.profiles.active=dev

spring.profiles.active 取值可为 dev、prod、test。上述配置指定开发环境配置文件有效,即取 application-dev.properties 文件中的相关配置。

  1. 启动时指定生效的 profiles 参数,启动脚本示例如下所示。

    nohup java -Xms3g -Xmx3g -Xmn1g -Xss256k -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/logdisk/gclog/gctest.log -jar test-1.0-SNAPSHOT.jar --spring.profiles.active=prod >/dev/null 2>&1 &

二、配置文件(application.properties)所在目录不同,加载优先级也不同

在 Spring Boot 源码文件(spring-boot-2.1.3.RELEASE.jar)中,org.springframework.boot.context.config 包下的 ConfigFileApplicationListener 类中定义了默认配置文件和默认搜索路径,也可以通过该类中的 setSearchLocations() 和 setSearchNames() 方法来设置其他的搜索位置或者设置其它配置文件名称。

ConfigFileApplicationListener 是一个 ApplicationListener,也是一个 EnvironmentPostProcessor。作为 ApplicationListener,它监听了事件 ApplicationEnvironmentPreparedEvent 和 ApplicationPreparedEvent。ApplicationEnvironmentPreparedEvent 事件发生时,它将 Spring Boot 内置配置的其他 EnvironmentPostProcessor 和自己放到一起,排序,然后应用到应用上下文环境对象上。该 EnvironmentPostProcessor 对应用上下文环境所做的操作就是读取配置文件将它们添加到应用上下文环境中去。ConfigFileApplicationListener 类所在的包路径如下图所示。

ConfigFileApplicationListener 类部分源码如下所示。

// Note the order is from least to most specific (last one wins) private static final String DEFAULT_SEARCH_LOCATIONS = "classpath:/,classpath:/config/,file:./,file:./config/";

缺省情况下,配置属性会从以下路径的 application.properties/yml 文件中读取:

  • classpath:/
  • classpath:/config/
  • file:./
  • file:./config/

如注释所言,上述配置文件优先级由低到高,重复的配置被高优先级覆盖,不重复的配置互补。如下图所示,application.properties 优先级从 1 到 4 递减。

三、外部配置

Spring Boot 也可以采用外部配置文件来配置不同环境的属性,具体可以参考官方文档:https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-external-config。截取部分文档内容如下,完整文档可以阅读官网。

文章参考:

  • 7.springboot配置文件配置运行环境、放置位置
  • https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-external-config
  • Springboot内置ApplicationListener–ConfigFileApplicationListener
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 12:01:00

PDF-Extract-Kit保姆级教程:结果导出与API集成

PDF-Extract-Kit保姆级教程:结果导出与API集成 1. 引言 1.1 工具背景与核心价值 在处理PDF文档时,尤其是学术论文、技术报告或扫描件,我们常常面临信息提取效率低、格式混乱的问题。传统方法依赖手动复制粘贴,不仅耗时且容易出…

作者头像 李华
网站建设 2026/4/11 12:56:03

腾讯开源模型进阶:HY-MT1.5插件开发指南

腾讯开源模型进阶:HY-MT1.5插件开发指南 随着多语言交流需求的不断增长,高质量、低延迟的翻译模型成为智能应用的核心组件。腾讯混元团队推出的 HY-MT1.5 系列翻译模型,凭借其卓越的语言覆盖能力与工程优化设计,在学术与工业场景…

作者头像 李华
网站建设 2026/4/15 11:59:43

基于与或非门的8位加法器构建:系统学习教程

从零搭建8位加法器:用与或非门点亮第一个“进位波纹”你有没有想过,一个简单的1 1 2在计算机底层是如何实现的?不是调用库函数,也不是靠CPU指令——而是由最基础的逻辑门一步步“推”出来的。今天我们就来干一件“原始”但极其硬…

作者头像 李华
网站建设 2026/4/15 13:32:47

PDF-Extract-Kit部署案例:政府档案数字化处理方案

PDF-Extract-Kit部署案例:政府档案数字化处理方案 1. 引言 1.1 政府档案数字化的迫切需求 随着电子政务建设的不断推进,各级政府机构积累了大量纸质和扫描版PDF格式的历史档案。这些文档涵盖政策文件、会议纪要、审批记录等重要信息,但受限…

作者头像 李华
网站建设 2026/4/1 3:40:41

腾讯开源翻译模型应用:游戏多语言本地化方案

腾讯开源翻译模型应用:游戏多语言本地化方案 随着全球化进程的加速,游戏出海已成为国内厂商的重要战略方向。然而,语言障碍始终是本地化过程中的核心挑战——既要保证翻译准确,又要兼顾文化适配、术语统一和实时响应。传统商业翻…

作者头像 李华
网站建设 2026/4/12 21:11:58

RS485半双工通信时序优化在STM32中的实践

RS485半双工通信时序优化在STM32中的实战精要工业现场,一条屏蔽双绞线横穿数十米,连接着PLC、变频器和温控仪表。上位机轮询指令刚发出,响应却迟迟不回——是线路干扰?还是协议解析出错?经验丰富的工程师知道&#xff…

作者头像 李华