@Profile注释中的AND运算符

时间:2017-05-13 09:38:01

标签: java spring spring-mvc spring-boot

我在Spring Boot应用程序中有这个配置类。 v1.5.3.RELEASE

@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}")

1 个答案:

答案 0 :(得分:3)

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

尽管如此,这种配置并不意味着" dev"和"幼仔"需要配置文件。
至少其中一个的存在验证了该条件。

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

  

个人资料字符串可能包含简单的个人资料名称(例如" p1" )   或者个人资料表达。配置文件表达式允许更多   要表达的复杂轮廓逻辑,例如" p1& P2" 即可。看到    Profiles.of(String ...),了解有关支持格式的详细信息。

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

@Profile("dev & cub")

现在可以更明确地表达一个或另一个档案的存在:

@Profile("dev | cub")

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

@Profile("dev & !cub")

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

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

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

作为一般说明,请注意关于配置文件的联合作为激活规则,因为它可能是由于设计不良造成的,因为我们将过多的环境与#34;环境联系起来。