Spring的profile

https://docs.spring.io/spring-boot/docs/3.2.0/reference/htmlsingle/#features.profiles

Spring profile提供了一种方法,可以将应用程序配置的部分进行隔离,并且仅在某些特定环境中使其可用。任何标记有 @Component@Configuration@ConfigurationProperties 的组件都可以使用 @Profile 进行标记,以限制其加载时间,如下例所示:

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

@Configuration(proxyBeanMethods = false)
@Profile("production")
public class ProductionConfiguration {

    // ...

}

注意:如果通过 @EnableConfigurationProperties 注册 @ConfigurationProperties Bean,而不是通过自动扫描,那么需要在带有 @EnableConfigurationProperties 注解的 @Configuration 类上指定 @Profile 注解。在 @ConfigurationProperties 被扫描的情况下,可以在@ConfigurationProperties 类本身上指定 @Profile

可以使用 spring.profiles.active Environment 属性来指定哪些profile是活动的。例如,可以在 application.properties 文件中包含它,如下所示:

spring.profiles.active=dev,hsqldb

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

如果没有活动的profile,将启用默认profile。默认profile的名称是default,并且可以使用spring.profiles.default Environment属性进行调整,如下例所示:

spring.profiles.default=none

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

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

# this document is valid
spring.profiles.active=prod
#---
# this document is invalid
spring.config.activate.on-profile=prod
spring.profiles.active=metrics

增加活动profile(Adding Active Profiles)

spring.profiles.active 属性遵循与其它属性相同的排序规则:优先级最高的 PropertySource 取胜。这意味着可以在 application.properties 中指定活动profile,然后使用命令行开关来替换它们。

有时,添加而不是替换活动profile的属性会很有用。可以使用 spring.profiles.include 属性在活动profile的基础上添加其它活动profile。SpringApplication 入口点还具有用于设置附加profile的 Java API:setAdditionalProfiles()
例如,当运行具有以下属性的应用程序时,即使使用 --spring.profiles.active 开关运行,也会激活 commonlocal profile:

spring.profiles.include[0]=common
spring.profiles.include[1]=local

注意:与 spring.profiles.active 类似,spring.profiles.include 只能在非特定profile的文档中使用。这意味着它不能包含在由 spring.config.activate.on-profile 激活的特定profile或文档中。

在下一节中描述的profile组也可以用于在给定profile处于活动状态时添加活动profile。

profile组

偶尔,不在应用程序中定义和使用的profile于精细,使用起来变得繁琐。例如,你可能有 proddbprodmq profile,用于独立启用数据库和消息传递功能。

为了帮助解决这个问题,Spring Boot 允许定义profile组。profile组允许为相关的profile组定义逻辑名称。
例如,我们可以创建一个由 proddbprodmq profile组成的 production 组。

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

现在,我们的应用程序可以使用 --spring.profiles.active=production 来一次激活 productionproddbprodmq profile。

编程方式设置profile

可以在应用程序运行之前通过调用 SpringApplication.setAdditionalProfiles(…​) 以编程方式设置活动profile。 也可以使用 Spring 的 ConfigurableEnvironment 接口来激活profile。

特定profile的配置文件

application.properties(application.yaml)的特定profile变体以及通过@ConfigurationProperties引用的文件都被视为文件并加载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值