neu*_*242 6 profile configuration spring
正如预期的那样,如果moduleTest是活动配置文件,则不会加载此配置:
@Profile({"!moduleTest"})
@Configuration
public class UserConfig {
}
Run Code Online (Sandbox Code Playgroud)
但是,此配置将加载:
@Profile({"!moduleTest", "!featureTest"})
@Configuration
public class UserConfig {
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让一个配置无法加载,如果moduleTest 或是 featureTest活动的?
Mic*_*ing 10
有一种简单(未记录,但我认为官方支持)的方法来做到这一点:
@Profile("!moduleTest & !featureTest")
Run Code Online (Sandbox Code Playgroud)
默认情况下,Spring 使用逻辑 OR,这会强制它使用逻辑 AND。
尝试使用条件:
@Configuration
@Conditional(LoadIfNotModuleNorTestProfileCondition.class)
public class UserConfig {
}
Run Code Online (Sandbox Code Playgroud)
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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4086 次 |
| 最近记录: |