配置文件

Spring 配置文件提供了一种方法来隔离应用程序配置的各个部分,并使其仅在某些环境中可用。任何@Component@Configuration@ConfigurationProperties 都可以使用@Profile 标记来限制其加载时间,如下例所示。

  • Java

  • Kotlin

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 {

	// ...

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

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

  • 属性

  • YAML

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

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

如果没有激活任何配置文件,则会启用默认配置文件。默认配置文件的名称为default,可以使用spring.profiles.default `Environment` 属性进行调整,如下例所示。

  • 属性

  • YAML

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

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

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

  • 属性

  • YAML

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"

添加活动配置文件

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

有时,拥有可以**添加到**活动配置文件而不是替换它们的属性非常有用。spring.profiles.include 属性可用于在由 spring.profiles.active 属性激活的配置文件之上添加活动配置文件。SpringApplication 入口点也具有用于设置附加配置文件的 Java API。请参阅SpringApplication 中的 setAdditionalProfiles() 方法。

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

  • 属性

  • YAML

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

如果激活了给定配置文件,则还可以使用下一节中描述的配置文件组 来添加活动配置文件。

配置文件组

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

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

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

  • 属性

  • YAML

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

现在,可以使用--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 引用的文件的特定于配置文件的变体都被视为文件并被加载。有关详细信息,请参阅特定配置文件的文件