如果存在多个配置文件之一,则禁用 Spring 配置
Disable Spring Configuration if one of several profiles is present
正如预期的那样,如果 moduleTest
是活动配置文件,则不会加载此配置:
@Profile({"!moduleTest"})
@Configuration
public class UserConfig {
}
但是,此配置将加载:
@Profile({"!moduleTest", "!featureTest"})
@Configuration
public class UserConfig {
}
如果 moduleTest
或 featureTest
是 不 加载的配置活跃?
尝试使用条件:
@Configuration
@Conditional(LoadIfNotModuleNorTestProfileCondition.class)
public class UserConfig {
}
LoadIfNotModuleNorTestProfileCondition class:
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;
}
}
有一种简单的(未记录,但我认为官方支持)方法:
@Profile("!moduleTest & !featureTest")
默认情况下 Spring 使用逻辑 OR,这会强制它使用逻辑 AND。
正如预期的那样,如果 moduleTest
是活动配置文件,则不会加载此配置:
@Profile({"!moduleTest"})
@Configuration
public class UserConfig {
}
但是,此配置将加载:
@Profile({"!moduleTest", "!featureTest"})
@Configuration
public class UserConfig {
}
如果 moduleTest
或 featureTest
是 不 加载的配置活跃?
尝试使用条件:
@Configuration
@Conditional(LoadIfNotModuleNorTestProfileCondition.class)
public class UserConfig {
}
LoadIfNotModuleNorTestProfileCondition class:
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;
}
}
有一种简单的(未记录,但我认为官方支持)方法:
@Profile("!moduleTest & !featureTest")
默认情况下 Spring 使用逻辑 OR,这会强制它使用逻辑 AND。