【问题标题】:AND operator in @Profile annotation@Profile 注释中的 AND 运算符
【发布时间】:2017-05-13 09:38:00
【问题描述】:

我的 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}")

【问题讨论】:

    标签: java spring spring-mvc spring-boot


    【解决方案1】:

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

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

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

    配置文件字符串可以包含一个简单的配置文件名称(例如 "p1") 或配置文件表达式。配置文件表达式允许更多 要表达的复杂的profile逻辑,例如"p1 & p2"。看 Profiles.of(String...) 了解有关支持格式的更多详细信息。

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

    @Profile("dev & cub")
    

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

    @Profile("dev | cub")
    

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

    @Profile("dev & !cub")
    

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

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

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

    作为一般说明,请注意将配置文件联合作为激活规则,因为它可能是由于我们过多地耦合“环境”的不良设计造成的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      • 1970-01-01
      • 2013-08-01
      • 2014-04-22
      • 2019-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多