您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

将@Profile批注与属性占位符值一起使用

将@Profile批注与属性占位符值一起使用

通过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对字符串表达式的评估也无处不在)

您可以在这里这里找到我上面提到的代码

一个说明,我不确定为什么需要一个动态的配置文件名称

其他 2022/1/1 18:17:02 有515人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶