跳到主要内容

个人档案

DeepSeek V3 中英对照 Profiles

Spring Profiles 提供了一种方式来隔离应用程序配置的部分,并使其仅在特定环境中可用。任何 @Component@Configuration@ConfigurationProperties 都可以用 @Profile 标记,以限制其加载的时机,如下例所示:

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

@Configuration(proxyBeanMethods = false)
@Profile("production")
public class ProductionConfiguration {

// ...

}
java
备注

如果 @ConfigurationProperties bean 是通过 @EnableConfigurationProperties 而不是自动扫描注册的,那么需要在带有 @EnableConfigurationProperties 注解的 @Configuration 类上指定 @Profile 注解。如果 @ConfigurationProperties 是通过扫描注册的,则可以在 @ConfigurationProperties 类本身指定 @Profile 注解。

你可以使用 spring.profiles.active 环境属性来指定哪些配置文件是激活的。你可以通过本章前面描述的任何方式来指定该属性。例如,你可以将其包含在 application.properties 中,如下例所示:

spring.profiles.active=dev,hsqldb
properties

你也可以在命令行中通过以下开关来指定它:--spring.profiles.active=dev,hsqldb

如果没有激活的配置文件,则会启用默认配置文件。默认配置文件的名称是 default,可以通过 spring.profiles.default 环境 属性进行调整,如下例所示:

spring.profiles.default=none
properties

spring.profiles.activespring.profiles.default 只能用于非特定配置文件的文档中。这意味着它们不能包含在特定配置文件或由 spring.config.activate.on-profile 激活的文档中。

例如,第二个文档配置是无效的:

spring.profiles.active=prod
#---
spring.config.activate.on-profile=prod
spring.profiles.active=metrics
properties

添加活动配置文件

spring.profiles.active 属性遵循与其他属性相同的排序规则:最高优先级的 PropertySource 胜出。这意味着你可以在 application.properties 中指定激活的配置文件,然后通过使用命令行开关来替换它们。

有时候,拥有一些添加到活动配置文件中而不是替换它们的属性是非常有用的。spring.profiles.include 属性可以用来在由 spring.profiles.active 属性激活的配置文件基础上添加其他活动配置文件。SpringApplication 入口点还提供了一个 Java API 来设置额外的配置文件。请参阅 SpringApplication 中的 setAdditionalProfiles() 方法。

例如,当运行具有以下属性的应用程序时,即使使用 --spring.profiles.active 开关运行,也会激活 commonlocal 配置文件:

spring.profiles.include[0]=common
spring.profiles.include[1]=local
properties
注意

spring.profiles.active 类似,spring.profiles.include 只能在非特定配置文件的文档中使用。这意味着它不能包含在特定配置文件或由 spring.config.activate.on-profile 激活的文档中。

配置文件组(在下一节中描述)也可以用于在给定配置文件处于激活状态时添加激活的配置文件。

配置文件组

有时,你在应用程序中定义和使用的配置文件过于细粒度,导致使用起来变得繁琐。例如,你可能拥有 proddbprodmq 这样的配置文件,分别用于独立启用数据库和消息队列功能。

为此,Spring Boot 允许你定义配置文件组。配置文件组允许你为相关的配置文件组定义一个逻辑名称。

例如,我们可以创建一个包含 proddbprodmq 配置文件的 production 组。

spring.profiles.group.production[0]=proddb
spring.profiles.group.production[1]=prodmq
properties

我们的应用程序现在可以通过使用 --spring.profiles.active=production 来一次性激活 productionproddbprodmq 配置文件。

注意

spring.profiles.activespring.profiles.include 类似,spring.profiles.group 只能用于非特定配置文件的文档中。这意味着它不能包含在特定配置文件中,也不能在由 spring.config.activate.on-profile 激活的文档中使用。

以编程方式设置配置文件

在应用程序运行之前,你可以通过调用 SpringApplication.setAdditionalProfiles(…​) 以编程方式设置激活的配置文件。也可以通过使用 Spring 的 ConfigurableEnvironment 接口来激活配置文件。

特定配置文件的配置文件

application.properties(或 application.yaml)的特定配置文件变体以及通过 @ConfigurationProperties 引用的文件被视为文件并加载。详情请参见特定配置文件