2016-02-07 19 views
5

に登録をスキップ:など、devprodqcconsole春ブート構成私は別のプロファイルのセットアップで春ブートアプリケーションまし複数@Profile

次のように2つのコンフィギュレーションクラスが設定されています。 consoleを除くすべてのプロファイルにMyConfigurationAを登録する必要があります。 MyConfigurationBは、consoledevを除いて登録する必要があります。

プロファイルconsoleでアプリケーションを実行すると、MyConfigurationAは登録されません。これは問題ありません。しかし、MyConfigurationBが登録されます - 私は望んでいません。プロファイルconsoledevMyConfigurationBを登録しないように、@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"; 
    ... 
} 

答えて

8

@Profile({"!console", "!dev"})手段(コンソールNOT)OR(DEV NOT)。

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

や構成に@Conditional注釈を経由して条件を適用します:カスタムConditionを作成することができ、この解決するために

@Conditional(NotConsoleAndDevCondition.class) 
public class MyConfigurationB { 
+0

そうです!!ありがとう.. – gtiwari333

関連する問題