25、Profile

Spring Profile 提供了一种应用程序配置部分隔离并使其仅在特定环境中可用的方法。可以使用 @Profile 来注解任何 @Component@Configuration 以指定何时加载它,如下所示:

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

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

  1. spring.profiles.active=dev,hsqldb

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

25.1、添加激活 Profile

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

有时,将特定 profile 的属性添加到激活配置文件而不是替换它们,这种方式也是很有用的。spring.profiles.include 属性可无条件地添加激活配置文件。SpringApplication 入口还有一个 Java API,用于设置其他 profile(即,在 spring.profiles.active 属性激活的 profile 之上)。请参阅SpringApplication 中的 setAdditionalProfiles() 方法。

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

  1. ---
  2. my.property: fromyamlfile
  3. ---
  4. spring.profiles: prod
  5. spring.profiles.include:
  6. - proddb
  7. - prodmq

注意

请记住,可以在 YAML 文档中定义 spring.profiles 属性,以确定此特定文档何时包含在配置中。有关更多详细信息,请参见第 77.7 章节:根据环境更改配置

25.2、以编程方式设置 Profile

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

25.3、特定 Profile 的配置文件

特定 profile 的 application.properties(或 application.yml)和通过 @ConfigurationProperties 引用的文件被当做文件并加载。有关详细信息,请参见第 24.4 章节:特定 Profile 的属性文件