【问题标题】:Disable Spring Configuration if one of several profiles is present如果存在多个配置文件之一,则禁用 Spring Configuration
【发布时间】:2017-01-21 00:12:37
【问题描述】:

正如预期的那样,如果 moduleTest 是活动配置文件,则不会加载此配置:

@Profile({"!moduleTest"})
@Configuration
public class UserConfig {
}

但是,此配置加载:

@Profile({"!moduleTest", "!featureTest"})
@Configuration
public class UserConfig {
}

如果moduleTest featureTest 处于活动状态,有没有办法让配置加载?

【问题讨论】:

  • @Configuration 是一个spring bean,所以尽量使用@Conditional。为此,您将需要弹簧靴。

标签: spring configuration profile


【解决方案1】:

尝试使用条件:

@Configuration
@Conditional(LoadIfNotModuleNorTestProfileCondition.class)
public class UserConfig {
}

LoadIfNotModuleNorTestProfileCondition 类:

public class LoadIfNotModuleNorTestProfileCondition implements ConfigurationCondition{

    @Override
    public ConfigurationPhase getConfigurationPhase() {
        return ConfigurationPhase.PARSE_CONFIGURATION;
    }

    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        String[] activeProfiles = context.getEnvironment().getActiveProfiles();
        for (String profile : activeProfiles) {
            if(profile.equalsIgnoreCase("moduleTest") || profile.equalsIgnoreCase("featureTest")){
                return false;
            }
        }
        return true;
    }

}

【讨论】:

    【解决方案2】:

    有一种简单(未记录,但我认为官方支持)的方法:

    @Profile("!moduleTest & !featureTest")
    

    默认情况下,Spring 使用逻辑 OR,这会强制它使用逻辑 AND。

    【讨论】:

    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 2020-05-31
    • 2016-07-25
    • 1970-01-01
    • 2019-01-06
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多