配置文件
Spring Profiles 提供了一种方法来隔离应用程序配置的各个部分,并使其仅在某些环境中可用。任何 @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.active
和 spring.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 激活的文档 中。
|
配置文件组,将在下一节中介绍,也可以用于在给定配置文件处于活动状态时添加活动配置文件。
配置文件组
有时,您在应用程序中定义和使用的配置文件过于细粒度,使用起来很麻烦。例如,您可能拥有proddb
和prodmq
配置文件,分别用于独立启用数据库和消息传递功能。
为了解决这个问题,Spring Boot 允许您定义配置文件组。配置文件组允许您为相关配置文件组定义一个逻辑名称。
例如,我们可以创建一个名为production
的组,其中包含我们的proddb
和prodmq
配置文件。
-
属性
-
YAML
spring.profiles.group.production[0]=proddb
spring.profiles.group.production[1]=prodmq
spring:
profiles:
group:
production:
- "proddb"
- "prodmq"
现在,我们的应用程序可以使用--spring.profiles.active=production
启动,以一次性激活production
、proddb
和prodmq
配置文件。
以编程方式设置配置文件
您可以在应用程序运行之前调用SpringApplication.setAdditionalProfiles(…)
以编程方式设置活动配置文件。也可以使用 Spring 的ConfigurableEnvironment
接口激活配置文件。
特定于配置文件的配置文件
application.properties
(或application.yaml
)以及通过@ConfigurationProperties
引用的文件的特定于配置文件的变体将被视为文件并加载。有关详细信息,请参阅“特定于配置文件的文件”。