Spring Profiles提供了一种可以隔离部分应用程序配置的方法,使这些配置仅在某些环境中可用。任意的@Component
、@Configuration
或@ConfigurationProperties
可被@Profile
标记,当它被加载时进行限制。如下例所示:
@Configuration(proxyBeanMethods = false)
@Profile("production")
public class ProductionConfiguration {
// ...
}
如果
@ConfigurationProperties
Bean是通过@EnableConfigurationProperties
注解而不是使用自动扫描来注册,则具有@EnableConfigurationProperties
注解的@Configuration
类指定@Profile
注解。在@ConfigurationProperties
被扫描的情况下,@Profile
可以在@ConfigurationProperties
类本身上指定。
您可以使用Environment
属性spring.profiles.active
指定哪些配置文件处于激活状态。您可以通过前面章节介绍的任何方式指定属性。例如,您可以将其包括在你的application.properties
中,如下所示:
Properties:
spring.profiles.active=dev,hsqldb
Yaml:
spring:
profiles:
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 配置文件组
有时,在应用程序中定义和使用的配置文件的粒度太细,使用起来很麻烦。例如,您可能有proddb
和prodmq
两个配置文件,分别用于启用数据库和消息传递功能。
为了解决这个问题,Spring Boot允许您定义配置文件组。使用配置文件组,您可以为相关的配置文件组定义逻辑名。
例如,我们可以创建一个production
组,它由proddb
和prodmq
配置文件组成。
Properties:
spring.profiles.group.production[0]=proddb
spring.profiles.group.production[1]=prodmq
Yaml:
spring:
profiles:
group:
production:
- "proddb"
- "prodmq"
应用程序现在可以使用--spring.profiles.active=production
命令激活production
配置文件组,proddb
和prodmq
一起被启用。
3.3 以编程方式设置配置文件
您可以在应用程序运行之前,通过调用SpringApplication.setAdditionalProfiles(…)
来以编程方式设置活动配置文件。也可以通过使用Spring的ConfigurableEnvironment
接口来激活配置文件。
3.4 特定于配置文件的配置文件
application.properties
(或application.yml
)、通过@ConfigurationProperties
引用的文件这两种特定配置文件的变体都被视为配置文件并加载。有关详细信息,请参见“配置文件特定文件”。