Spring Profiles提供了一种可以隔离部分应用程序配置的方法,使这些配置仅在某些环境中可用。任意的@Component@Configuration@ConfigurationProperties可被@Profile标记,当它被加载时进行限制。如下例所示:

  1. @Configuration(proxyBeanMethods = false)
  2. @Profile("production")
  3. public class ProductionConfiguration {
  4. // ...
  5. }

info.svg 如果@ConfigurationProperties Bean是通过@EnableConfigurationProperties注解而不是使用自动扫描来注册,则具有@EnableConfigurationProperties注解的@Configuration类指定@Profile注解。在@ConfigurationProperties被扫描的情况下,@Profile可以在@ConfigurationProperties类本身上指定。

您可以使用Environment属性spring.profiles.active指定哪些配置文件处于激活状态。您可以通过前面章节介绍的任何方式指定属性。例如,您可以将其包括在你的application.properties中,如下所示:
Properties:

  1. spring.profiles.active=dev,hsqldb

Yaml:

  1. spring:
  2. profiles:
  3. active: "dev,hsqldb"

您还可以在命令行上使用随后的开关指定它:--spring.profiles.active=dev,hsqldb

3.1 添加活动的配置文件

spring.profiles.active属性如同其他属性一样,遵循相同的排序规则:以优先级最高的PropertySource为准。这意味着您可以在application.properties中指定活动配置文件,然后使用命令行开关替换它们。
有时,将属性添加到活动配置文件而不是替换它们很有用。SpringApplication的入口点存在设置额外配置文件(也就是,被spring.profiles.active属性激活的顶级配置文件)的Java API。参见SpringApplication中的setAdditionalProfiles()方法。下一部分中描述的配置文件组也可以用于添加活动的配置文件(如果给定的配置文件处于活动状态)。

3.2 配置文件组

有时,在应用程序中定义和使用的配置文件的粒度太细,使用起来很麻烦。例如,您可能有proddbprodmq两个配置文件,分别用于启用数据库和消息传递功能。
为了解决这个问题,Spring Boot允许您定义配置文件组。使用配置文件组,您可以为相关的配置文件组定义逻辑名。
例如,我们可以创建一个production组,它由proddbprodmq配置文件组成。
Properties:

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

Yaml:

  1. spring:
  2. profiles:
  3. group:
  4. production:
  5. - "proddb"
  6. - "prodmq"

应用程序现在可以使用--spring.profiles.active=production命令激活production配置文件组,proddbprodmq一起被启用。

3.3 以编程方式设置配置文件

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

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

application.properties(或application.yml)、通过@ConfigurationProperties引用的文件这两种特定配置文件的变体都被视为配置文件并加载。有关详细信息,请参见“配置文件特定文件”。