に登録をスキップ:など、dev
、prod
、qc
をconsole
春ブート構成私は別のプロファイルのセットアップで春ブートアプリケーションまし複数@Profile
次のように2つのコンフィギュレーションクラスが設定されています。 console
を除くすべてのプロファイルにMyConfigurationA
を登録する必要があります。 MyConfigurationB
は、console
とdev
を除いて登録する必要があります。
プロファイルconsole
でアプリケーションを実行すると、MyConfigurationA
は登録されません。これは問題ありません。しかし、MyConfigurationB
が登録されます - 私は望んでいません。プロファイルconsole
とdev
にMyConfigurationB
を登録しないように、@Profile
注釈を次のように設定しました。
のアプリケーションを実行すると、MyConfigurationB
が登録されています。
@Profile({ "!" + Constants.PROFILE_CONSOLE , "!" + Constants.PROFILE_DEVELOPMENT })
ドキュメント(http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/Profile.html)はつのプロファイルを含むと他を排除する例を有します。 プロファイルP1 'は、' 'P2' のプロフィール場合、アクティブORであれば私の例では、私は@Profile({"!p1", "!p2"}):
@Profile({ "P1"、 "!P2"})の両方を除いたよ、登録が行われますアクティブではありません。
私の質問は:どのように我々は両方のプロファイルの設定の登録をスキップすることができますか? @Profile({"!p1", "!p2"})
がOR操作を行っています。ここでAND操作が必要です。
コード:プロファイルを使用してアプリ 'コンソール' を実行している場合はtrueです
@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