通过Spring的源代码,我得出的结论是您所要求的是不可能的。为了清楚起见,不可能让Spring${property}
内部进行评估@Profile
。
具体看看ProfileCondition
哪个检查配置文件是否处于活动状态。
class ProfileCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata Metadata) {
if (context.getEnvironment() != null) {
MultiValueMap<String, Object> attrs = Metadata.getAllAnnotationAttributes(Profile.class.getName());
if (attrs != null) {
for (Object value : attrs.get("value")) {
if (context.getEnvironment().acceptsProfiles(((String[]) value))) {
return true;
}
}
return false;
}
}
return true;
}
}
肉是context.getEnvironment().acceptsProfiles(((String[]) value))
。
现在,如果你检查的来源AbstractEnvironment
在那里acceptsProfiles
居住,你会发现,在控制到达
protected boolean isProfileActive(String profile) {
validateProfile(profile);
return doGetActiveProfiles().contains(profile) ||
(doGetActiveProfiles().isEmpty() && doGetDefaultProfiles().contains(profile));
}
它不尝试计算表达式,而是采用逐字字符串形式(还请注意,isProfileActive
对字符串表达式的评估也无处不在)