对于最新的稳定版本,请使用 Spring Boot 3.4.0spring-doc.cadn.net.cn

配置 文件

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

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 {

	// ...

}
如果@ConfigurationPropertiesbean 通过@EnableConfigurationProperties不是自动扫描,而是@Profileannotation 需要在@Configuration类中具有@EnableConfigurationProperties注解。 在以下情况下@ConfigurationProperties被扫描,@Profile可以在@ConfigurationProperties类本身。

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

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

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

如果没有配置文件处于活动状态,则启用默认配置文件。 默认配置文件的名称为default并且可以使用spring.profiles.default Environment属性,如以下示例所示:spring-doc.cadn.net.cn

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

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

例如,第二个文档配置无效:spring-doc.cadn.net.cn

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.activeproperty 遵循与其他 property 相同的排序规则:highestPropertySource赢了。 这意味着您可以在application.properties,然后使用命令行开关替换它们。spring-doc.cadn.net.cn

有时,将属性添加到活动配置文件中而不是替换它们非常有用。 这spring.profiles.include属性可用于在由spring.profiles.active财产。 这SpringApplicationentry point 还具有用于设置其他配置文件的 Java API。 请参阅setAdditionalProfiles()method 中SpringApplication.spring-doc.cadn.net.cn

例如,当运行具有以下属性的应用程序时,即使它使用--spring.profiles.active开关:spring-doc.cadn.net.cn

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.

如果给定配置文件处于活动状态,则下一节中介绍的配置文件组也可用于添加活动配置文件。spring-doc.cadn.net.cn

配置文件组

有时,您在应用程序中定义和使用的配置文件过于精细,使用起来变得很麻烦。 例如,您可能有proddbprodmq用于单独启用数据库和消息传递功能的配置文件。spring-doc.cadn.net.cn

为了帮助解决这个问题, Spring Boot 允许你定义配置文件组。 配置文件组允许您为相关的配置文件组定义逻辑名称。spring-doc.cadn.net.cn

例如,我们可以创建一个productiongroup 的proddbprodmq配置 文件。spring-doc.cadn.net.cn

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

我们的应用程序现在可以开始使用--spring.profiles.active=production要激活production,proddbprodmq个人资料。spring-doc.cadn.net.cn

spring.profiles.activespring.profiles.include,spring.profiles.group只能在非配置文件特定的文档中使用。 这意味着它不能包含在用户档案特定的文件spring.config.activate.on-profile.

以编程方式设置配置文件

您可以通过调用SpringApplication.setAdditionalProfiles(…​)在应用程序运行之前。 也可以使用 Spring 的ConfigurableEnvironment接口。spring-doc.cadn.net.cn

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

两者的特定于配置文件的变体application.properties(或application.yaml) 和通过@ConfigurationProperties被视为文件并已加载。 有关详细信息,请参阅分析特定文件spring-doc.cadn.net.cn