当前位置: 首页 > 面试题库 >

我可以否定(!)Spring轮廓集合吗?

傅朗
2023-03-14
问题内容

是否可以以一种不会被一组概要文件使用的方式配置bean?目前,我可以做到这一点(我相信):

@Profile("!dev, !qa, !local")

是否有更整洁的符号来实现这一目标?假设我有很多个人资料。另外,如果我有某些服务(或其他服务)的Mock和具体实现,是否可以仅对其中之一进行注释,并假设在其他所有情况下都可以使用其他服务?换句话说,例如,这是否必要:

@Profile("dev, prof1, prof2")
public class MockImp implements MyInterface {...}

@Profile("!dev, !prof1, !prof2") //assume for argument sake that there are many other profiles
public class RealImp implements MyInterface {...}

我可以注释其中一个,@Primary而是在另一个注释上粘贴注释吗?

本质上,我想要这样:

@Profile("!(dev, prof1, prof2)")

提前致谢!


问题答案:

简短的答案是:您不能。
但是,由于有了@Conditional注释,所以存在一种巧妙的解决方法。

创建条件匹配器:

public abstract class ProfileCondition extends SpringBootCondition {
    @Override
    public ConditionOutcome getMatchOutcome(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        if (matchProfiles(conditionContext.getEnvironment())) {
            return ConditionOutcome.match("A local profile has been found.");
        }
        return ConditionOutcome.noMatch("No local profiles found.");
    }

    protected abstract boolean matchProfiles(final Environment environment);
}

public class DevProfileCondition extends ProfileCondition {
   private boolean matchProfiles(final Environment environment) {    
        return Arrays.stream(environment.getActiveProfiles()).anyMatch(prof -> {
            return prof.equals("dev") || prof.equals("prof1")) || prof.equals("prof2"));
        });
    }
}

public class ProdProfileCondition extends ProfileCondition {
   private boolean matchProfiles(final Environment environment) {    
        return Arrays.stream(environment.getActiveProfiles()).anyMatch(prof -> {
            return !prof.equals("dev") && !prof.equals("prof1")) && !prof.equals("prof2"));
        });
    }
}

用它

@Conditional(value = {DevProfileCondition.class})
public class MockImpl implements MyInterface {...}

@Conditional(value = {ProdProfileCondition.class})
public class RealImp implements MyInterface {...}

但是,此方法需要Springboot。



 类似资料:
  • 本质上我想要的是: 提前道谢!

  • 我有2个URL,其中1个特定于Dev,另一个特定于Prod。我也在使用Spring profiling,其中我有一个单独的文件用于Dev和Prod application-Dev。性能和应用-prod。属性和我的应用。对于Dev env,属性文件如下所示 spring.profiles.active=dev 现在在我的java代码中,我想有一个属性,它将根据我使用的Spring配置文件绑定到适当的

  • 我有两个Spring概要文件:和。我想在服务器环境中设置活动配置文件,但我不想在代码中设置它,以便在部署应用程序的任何地方,配置文件都是基于服务器中的配置文件加载的。我怎么能那样做?

  • 我有3个maven项目A、B、C。A是B的父项目,B是C的父项目。所有概要文件都在pom中定义。项目A的xml。 在项目C中,我试图根据所选概要文件在spring测试上下文中选择属性文件(在src/test/resources下)。对于回归测试,我们有两个属性文件: 本地应用程序测试。属性 在我们的Windows开发系统上,选定的配置文件将是“本地”的,相应地在服务器上也是如此。选择“本地”配置文

  • 基于这篇文章,我运行我的Spring Boot应用程序 具有该配置文件的组件不运行。我尝试用根应用程序类中的以下代码来验证活动概要文件 日志消息输出为空。 少了什么?

  • 主要内容:1. outline-style,2. outline-width,3. outline-color,4. outline,5. outline-offset轮廓(outline)是绘制于元素周围的一条线,位于边框的外围(紧贴着边框),主要用来突出显示某个元素,如下图所示: 图:轮廓(outline) 轮廓和边框看起来非常相似,但它们之间也并非没有区别,例如: 元素上下左右四个方向上边框的样式、宽度、颜色可以单独设置,而轮廓在元素四个方向的宽度、样式、颜色都是相同的,不能单独设置; 边

  • 问题内容: 有没有一种方法可以检查nodestore的firestore中是否存在子集合? 目前,我正在使用文档,但是我需要检查文档中是否存在子类以便写入一些数据。 问题答案: 就在这里。您可以使用docs.length来知道子集合是否存在。 我制作了一个样本来指导您,希望对您有所帮助。