Spring Boot Configuration跳过在多个@Profile上的注册

gtiwari333

我曾与不同的配置文件设置一个春天启动应用程序:devprodqcconsole等。

这两个配置类的设置如下。MyConfigurationA应该为所有配置文件注册(除外)consoleMyConfigurationB应该注册,但console除外dev

当我使用profile运行应用程序时consoleMyConfigurationA不会被注册-很好。但是MyConfigurationB得到注册-我不想要。我已@Profile按如下所示设置了注释,以不注册MyConfigurationBfor资料consoledev

但是MyConfigurationB当我使用profile运行应用程序时,正在注册console

@Profile({ "!" + Constants.PROFILE_CONSOLE ,  "!" + Constants.PROFILE_DEVELOPMENT })

该文档(http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/Profile.html)提供了一个示例,其中包含一个配置文件,而排除另一个配置文件。在我的示例中,我排除了两个@Profile({"!p1", "!p2"}):

@Profile({“ p1”,“!p2”}),如果配置文件'p1'处于活动状态,或者如果配置文件'p2'未处于活动状态,则会进行注册

我的问题是:我们如何跳过两个配置文件的配置注册?@Profile({"!p1", "!p2"})正在执行OR操作。我们在这里需要AND操作。


代码 :

@Configuration
@Profile({ "!" + Constants.PROFILE_CONSOLE  })
public class MyConfigurationA {
    static{
        System.out.println("MyConfigurationA registering...");
    }
}

@Configuration
@Profile({ "!" + Constants.PROFILE_CONSOLE ,  "!" + Constants.PROFILE_DEVELOPMENT }) // doesn't exclude both, its OR condition
public class MyConfigurationB {
    static{
        System.out.println("MyConfigurationB registering...");
    }
}

public final class Constants {
    public static final String PROFILE_DEVELOPMENT = "dev";
    public static final String PROFILE_CONSOLE = "console";
    ...
}
西里尔

@Profile({"!console", "!dev"})表示(无控制台)(无开发者),如果您使用配置文件“控制台”运行应用程序,则为true。
为了解决这个问题,您可以创建一个自定义条件

public class NotConsoleAndDevCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        Environment environment = context.getEnvironment();
        return !environment.acceptsProfiles("console", "dev");
    }
}

并通过@Conditional批注将条件应用于配置:

@Conditional(NotConsoleAndDevCondition.class)
public class MyConfigurationB {

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Spring Boot中使用@Profile

来自分类Dev

我可以在组件上使用@Profile标记而不在Spring Boot或Web.xml中创建@Configuration类吗?

来自分类Dev

Spring Boot 将实例注册为 bean

来自分类Dev

自动注册 XA 资源 Spring Boot

来自分类Dev

在每个spring boot @Test上重写单个@Configuration类

来自分类Dev

在Spring Boot中以编程方式注册Spring Converter

来自分类Dev

使用Spring / Spring Boot注册Bean验证ValueExtractor

来自分类Dev

在Spring Boot Framework中将jaxws:client注册为Spring Bean

来自分类Dev

@boot注解在Spring Boot中的spring-boot-starter-jersey资源上的用途

来自分类Dev

Spring Boot中的多个SQL导入文件

来自分类Dev

Spring Boot-加载多个YAML文件

来自分类Dev

从Spring Boot加载多个Angular项目

来自分类Dev

Spring Boot中的多个servlet映射

来自分类Dev

使用Spring Boot配置多个servletcontainer / servlet

来自分类Dev

Spring Boot 1.3.0创建多个ContextLoader定义

来自分类Dev

使用Spring Boot配置多个servletcontainer / servlet

来自分类Dev

Spring Boot中的多个SQL导入文件

来自分类Dev

多个Spring Boot应用程序

来自分类Dev

使用 Spring Boot 上传多个文件

来自分类Dev

Spring boot 加载多个属性文件

来自分类Dev

Spring Boot无法在端口80上启动

来自分类Dev

Google App Engine上的Spring Boot

来自分类Dev

部署在tomcat上的Spring Boot无法启动

来自分类Dev

Spring Boot MultipartResolver在PUT方法上丢失

来自分类Dev

在Spring Boot上不广播ContextStartedEvent

来自分类Dev

Spring Boot上的Jersey-ApplicationPath

来自分类Dev

Spring Boot docker仅在8080上运行?

来自分类Dev

Spring Boot无法在端口80上启动

来自分类Dev

在封闭的网络上使用Spring Boot

Related 相关文章

热门标签

归档