对于最新的稳定版本,请使用 Spring Boot 3.5.5! |
配置 文件
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 beans 通过@EnableConfigurationProperties 而不是自动扫描,@Profile 注释需要在@Configuration 具有@EnableConfigurationProperties 注解。
在以下情况下@ConfigurationProperties 被扫描,@Profile 可以在@ConfigurationProperties 类本身。 |
您可以使用spring.profiles.active
Environment
属性来指定哪些配置文件处于活动状态。
您可以通过本章前面所述的任何方式指定属性。
例如,您可以将其包含在application.properties
,如以下示例所示:
-
Properties
-
YAML
spring.profiles.active=dev,hsqldb
spring:
profiles:
active: "dev,hsqldb"
您也可以使用以下开关在命令行上指定它:--spring.profiles.active=dev,hsqldb
.
如果没有处于活动状态的配置文件,则启用默认配置文件。
默认配置文件的名称为default
并且可以使用spring.profiles.default
Environment
属性,如以下示例所示:
-
Properties
-
YAML
spring.profiles.default=none
spring:
profiles:
default: "none"
spring.profiles.active
和spring.profiles.default
只能用于非特定于配置文件的文档。
这意味着它们不能包含在配置文件特定文件或由spring.config.activate.on-profile
.
例如,第二个文档配置无效:
-
Properties
-
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。
请参阅setAdditionalProfiles()
方法SpringApplication
.
例如,当运行具有以下属性的应用程序时,即使它使用--spring.profiles.active
开关:
-
Properties
-
YAML
spring.profiles.include[0]=common
spring.profiles.include[1]=local
spring:
profiles:
include:
- "common"
- "local"
包含的配置文件在任何spring.profiles.active 配置 文件。 |
这spring.profiles.include 属性为每个属性源处理,因此列表的通常复杂类型合并规则不适用。 |
似spring.profiles.active ,spring.profiles.include 只能用于非特定于配置文件的文档。
这意味着它不能包含在配置文件特定文件或由spring.config.activate.on-profile . |
如果给定的配置文件处于活动状态,则下一节中将介绍的配置文件组也可用于添加活动配置文件。
配置文件组
有时,您在应用程序中定义和使用的配置文件过于细粒度,使用起来很麻烦。
例如,您可能有proddb
和prodmq
用于独立启用数据库和消息传递功能的配置文件。
为了帮助解决这个问题,Spring Boot 允许您定义配置文件组。 配置文件组允许您为相关的配置文件组定义逻辑名称。
例如,我们可以创建一个production
由我们的proddb
和prodmq
配置 文件。
-
Properties
-
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
被视为文件并加载。
有关详细信息,请参阅配置文件特定文件。