Profiles

Spring 配置提供了分离应用程序配置部分的方法,并使其仅在特定环境中可用。任何 @Component@Configuration@ConfigurationProperties 都可以用 @Profile 标记,以限制其何时加载,如下例所示: include-code::ProductionConfiguration[]

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

你可以使用 configprop:spring.profiles.active[] Environment 属性来指定哪些配置处于活动状态。你可以使用本章前面描述的任何方式指定属性。例如,你可以将其包含在 application.properties 中,如下例所示:

spring:
  profiles:
    active: "dev,hsqldb"

你还可以使用以下开关在命令行中指定它:--spring.profiles.active=dev,hsqldb。 如果没有任何配置处于活动状态,则会启用默认配置。默认配置的名称是 default,可以使用 configprop:spring.profiles.default[] Environment 属性对其进行调整,如下例所示:

spring:
  profiles:
    default: "none"

spring.profiles.activespring.profiles.default 只可用于非特定配置文件的文档中。这意味着它们不能由 spring.config.activate.on-profile 包含在 profile specific filesdocuments activated 中。 例如,第二个文档配置无效:

# this document is valid
spring:
  profiles:
    active: "prod"
---
# this document is invalid
spring:
  config:
    activate:
      on-profile: "prod"
  profiles:
    active: "metrics"

Adding Active Profiles

configprop:spring.profiles.active[] 属性遵循与其他属性相同的排序规则:最高的 PropertySource 获胜。这意味着你可以在 application.properties 中指定活动配置,然后使用命令行开关 replace 它们。

有时,使用可以 add 活动配置文件而不是替换它们的属性很有用。spring.profiles.include 属性可用于在 configprop:spring.profiles.active[] 属性激活的配置之上添加活动配置。SpringApplication 入口点还有一个用于设置附加配置的 Java API。请参阅 setAdditionalProfiles() 中的 SpringApplication 方法。

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

spring:
  profiles:
    include:
      - "common"
      - "local"

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

配置文件组(在 next section 中描述)也可以在给定的配置文件处于活动状态时用于添加活动配置文件。

Profile Groups

有时,你在应用程序中定义和使用的配置文件过于细致,使用起来会很麻烦。例如,你可能有 proddbprodmq 配置文件,用于分别启用数据库和消息传递功能。

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

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

spring:
  profiles:
    group:
      production:
      - "proddb"
      - "prodmq"

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

Programmatically Setting Profiles

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

Profile-specific Configuration Files

application.properties(或`application.yaml`)的特定配置文件变体和通过`@ConfigurationProperties`引用的文件被认为是文件并被加载。有关详细信息,请参阅“Profile Specific Files”。