当前位置: 代码网 > it编程>编程语言>Java > SpringBoot 使用 spring.profiles.active 来区分不同环境配置实现

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

2026年04月15日 Java 我要评论
很多时候,我们项目在开发环境和生产环境的配置是不一样的,例如,数据库配置,在开发的时候,我们一般用测试数据库,而在生产环境,我们要用生产数据库,这时候,我们可以利用 profile 在不同的环境下配置

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

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

一、具体配置实现方法参考如下

在 application.properties 文件的同路径下,创建不同的环境参数文件,命名格式为:application-{profile}.properties,其中 {profile} 对应环境标识。

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

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

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

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

spring.profiles.active=dev

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

启动时指定生效的 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。截取部分文档内容如下,完整文档可以阅读官网。

到此这篇关于springboot 使用 spring.profiles.active 来区分不同环境配置实现的文章就介绍到这了,更多相关spring.profiles.active区分不同环境配置内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com