У меня есть приложение загрузки Spring с различной настройкой профиля: dev
, prod
, qc
, console
и т.д.Spring конфигурация загрузки пропустить регистрацию на несколько @Profile
два класса конфигурации настроен следующим образом. MyConfigurationA
должен быть зарегистрирован для всех профилей, кроме console
. MyConfigurationB
должны быть зарегистрированы, за исключением console
и dev
.
Когда я запускаю приложение с профилем console
, MyConfigurationA
не регистрируется - это нормально. Но регистрируется MyConfigurationB
- чего я не хочу. Я установил аннотацию @Profile
следующим образом, чтобы не зарегистрировать MyConfigurationB
для профиля console
и dev
.
Но MyConfigurationB
регистрируется при запуске приложения с профилем 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"})
делает ИЛИ работа. Нам нужна операция И.
Код:
@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";
...
}
Правильно !! Благодаря.. – gtiwari333