一尘不染

Spring配置文件-如何包括用于添加2个配置文件的AND条件?

spring-boot

如果活动概要文件是test或本地,我不希望加载特定的bean。但是,当我设置以下内容时,spring似乎将其视为“或”,并且在活动配置文件为test或local时都将执行该方法。但是,如果删除说local并保留test,那么在测试概要文件时不会创建Bean。

@Profile({"!test","!local"})

阅读 274

收藏
2020-05-30

共1个答案

一尘不染

使用Spring Boot
1.X时,您可以使用其他配置文件名称更新系统属性,并在之前处理所有布尔逻辑SpringApplication.run。如果符合条件,则可以将概要文件名称附加到活动概要文件中。如果没有,您将不会更改任何内容。

这是非常基本的检查,但是您可以添加更严格的配置文件验证,例如空检查和实际拆分配置文件列表。

    String profile = System.getProperty("spring.profiles.active");
    if(!profile.contains("test") && !profile.contains("local")) {
        System.setProperty("spring.profiles.active", profile + ",notdev");
    }

如果您使用的是Spring Boot
2.0,则可以addAdditionalProfiles用来添加配置文件(没有SB2应用程序,因此我无法对其进行测试,但我认为它只是将其添加到“系统属性”列表中)。

    String profile = System.getProperty("spring.profiles.active");
    if(!profile.contains("test") && !profile.contains("local")) {
        SpringApplication.addAdditionalProfiles("notdev");
    }

然后您的注释可以是:

@Profile({"notdev"})
2020-05-30