Spring Profiles 提供了一种隔离应用程序配置各部分的方法,并使其仅在某些环境中可用。 任何 ,或者可以在加载时标记为 to limit,如以下示例所示:@Component@Configuration@ConfigurationProperties@ProfileSpring中文文档

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

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

	// ...

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

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

	// ...

}
如果 Bean 是通过注册而不是自动扫描来注册的,那么需要在具有注释的类上指定注释。 在被扫描的情况下,可以在类本身上指定。@ConfigurationProperties@EnableConfigurationProperties@Profile@Configuration@EnableConfigurationProperties@ConfigurationProperties@Profile@ConfigurationProperties

可以使用属性来指定哪些配置文件处于活动状态。 可以通过本章前面所述的任何方式指定属性。 例如,您可以将其包含在 中,如以下示例所示:spring.profiles.activeEnvironmentapplication.propertiesSpring中文文档

spring.profiles.active=dev,hsqldb
spring:
  profiles:
    active: "dev,hsqldb"

还可以使用以下开关在命令行上指定它:。--spring.profiles.active=dev,hsqldbSpring中文文档

如果没有配置文件处于活动状态,则启用默认配置文件。 默认配置文件的名称是,可以使用该属性对其进行调整,如以下示例所示:defaultspring.profiles.defaultEnvironmentSpring中文文档

spring.profiles.default=none
spring:
  profiles:
    default: "none"

spring.profiles.active并且只能用于非配置文件特定的文档。 这意味着它们不能包含在 激活的配置文件文档中。spring.profiles.defaultspring.config.activate.on-profileSpring中文文档

例如,第二个文档配置无效:Spring中文文档

spring.profiles.active=prod
#---
spring.config.activate.on-profile=prod
spring.profiles.active=metrics
# this document is valid
spring:
  profiles:
    active: "prod"
---
# this document is invalid
spring:
  config:
    activate:
      on-profile: "prod"
  profiles:
    active: "metrics"
如果 Bean 是通过注册而不是自动扫描来注册的,那么需要在具有注释的类上指定注释。 在被扫描的情况下,可以在类本身上指定。@ConfigurationProperties@EnableConfigurationProperties@Profile@Configuration@EnableConfigurationProperties@ConfigurationProperties@Profile@ConfigurationProperties

添加活动配置文件

该属性遵循与其他属性相同的排序规则:最高者优先。 这意味着您可以在其中指定活动配置文件,然后使用命令行开关替换它们。spring.profiles.activePropertySourceapplication.propertiesSpring中文文档

有时,将属性添加到活动配置文件而不是替换它们会很有用。 该属性可用于在属性激活的配置文件之上添加活动配置文件。 入口点还具有用于设置其他配置文件的 Java API。 请参阅 SpringApplication 中的方法。spring.profiles.includespring.profiles.activeSpringApplicationsetAdditionalProfiles()Spring中文文档

例如,当运行具有以下属性的应用程序时,即使使用开关运行,公共配置文件和本地配置文件也会被激活:--spring.profiles.activeSpring中文文档

spring.profiles.include[0]=common
spring.profiles.include[1]=local
spring:
  profiles:
    include:
      - "common"
      - "local"
与 类似,只能用于非配置文件特定的文档。 这意味着它不能包含在由激活的配置文件或文档中。spring.profiles.activespring.profiles.includespring.config.activate.on-profile

如果给定配置文件处于活动状态,则配置文件组(将在下一节中介绍)用于添加活动配置文件。Spring中文文档

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

配置文件组

有时,您在应用程序中定义和使用的配置文件过于细粒度,使用起来变得很麻烦。 例如,您可能具有用于独立启用数据库和消息传递功能的配置文件。proddbprodmqSpring中文文档

为了帮助解决这个问题,Spring Boot 允许您定义配置文件组。 配置文件组允许您为相关的配置文件组定义逻辑名称。Spring中文文档

例如,我们可以创建一个由 our 和 profiles 组成的组。productionproddbprodmqSpring中文文档

spring.profiles.group.production[0]=proddb
spring.profiles.group.production[1]=prodmq
spring:
  profiles:
    group:
      production:
      - "proddb"
      - "prodmq"

我们的应用程序现在可以启动,用于一次性激活 、 和配置文件。--spring.profiles.active=productionproductionproddbprodmqSpring中文文档

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

以编程方式设置配置文件

您可以通过在应用程序运行之前调用以编程方式设置活动配置文件。 也可以使用 Spring 的界面激活配置文件。SpringApplication.setAdditionalProfiles(…​)ConfigurableEnvironmentSpring中文文档

特定于配置文件的配置文件

特定于配置文件的 (或 ) 变体和引用的文件被视为文件并加载。 有关详细信息,请参阅“配置文件特定文件”。application.propertiesapplication.yaml@ConfigurationPropertiesSpring中文文档