gpt4 book ai didi

java - @Profile 注释中的 AND 运算符

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:03:37 26 4
gpt4 key购买 nike

我的 Spring Boot 应用程序中有这个配置类。 v1.5.3.发布

@Configuration
@Profile("dev && cub")
@PropertySource("file:///${user.home}/.cub/application-dev.properties")
public class CubDevelopmentConfig {
..
}

这个属性在我的 application.properties 中定义

spring.profiles.active=dev, cub

但是没有加载配置类

我也试过@Profile("{dev && cub}")

最佳答案

使用注解的value()方法的数组形式指定多个值。
那是 : @Profile({"dev", "cub"})

然而,此配置并不意味着“dev”和“cub”配置文件都是必需的。
至少其中之一的存在证实了该条件。

只有当两个配置文件都存在时才启用配置,到目前为止,Spring Boot 没有提供开箱即用的解决方案。
从 Spring Core 5.1(Spring Boot 2.1 或更高版本)开始,您终于可以在 @Profile 中使用一些表达式。请注意,这不是 EL,而是有限的表达式。

A profile string may contain a simple profile name (for example "p1") or a profile expression. A profile expression allows for more complicated profile logic to be expressed, for example "p1 & p2". See Profiles.of(String...) for more details about supported formats.

根据javadoc ,我们可以将多个配置文件的存在指定为条件:

@Profile("dev & cub")

现在可以更明确地表达一个或另一个配置文件的存在:

@Profile("dev | cub")

我们也可以依赖否定,例如:

@Profile("dev & !cub")

请注意,&| 不能在不使用括号的情况下混合在同一个表达式中。所以它应该用作:

@Profile("(dev & integ) | cub")

您可以检索有关Profile 表达式的所有规则here .

作为一般注意事项,请注意将配置文件并集作为激活规则,因为它可能是由糟糕的设计引起的,我们将太多“环境”耦合在一起。

关于java - @Profile 注释中的 AND 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43951564/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com