我有一个具有不同配置文件设置的 Spring Boot 应用程序:dev、、、prod等。qcconsole
两个配置类的设置如下。MyConfigurationA应该为所有配置文件注册,除了console. MyConfigurationB应该注册除了console和dev。
当我使用 profile 运行应用程序时console,MyConfigurationA没有注册 - 这很好。但是MyConfigurationB被注册了——我不想要。我已@Profile按如下方式设置注释,以不注册MyConfigurationBfor profile console和dev.
但是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";
...
}