このアプローチは実行可能ではないかもしれませんが、私は構造を誤解しています。@ConditionalOnProperty NestedConditionを拡張するクラスによって実装されたインターフェイスの内部クラス
私はSpringを使用していますが、私は2つの異なるタイプの@条件チェックに使用したいインターフェイスがあります。内部クラスを宣言し、私が探している@ConditonalOnProperty環境値を指定します。
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
public interface CloudEnvironments {
@ConditionalOnProperty(name = "spring.profiles.active", havingValue = "dev")
class IsDev {}
@ConditionalOnProperty(name = "spring.profiles.active", havingValue = "stage")
class IsStage {}
@ConditionalOnProperty(name = "spring.profiles.active", havingValue = "prod")
class IsProd {}
}
次に、適切なSpring NestedConditionを拡張するmyクラスを作成します。残念ながら、私が実行したときに一致するために、任意の環境(クラウド)をチェックし、環境の試合のNONE(ローカル)
import org.springframework.boot.autoconfigure.condition.AnyNestedCondition;
import org.springframework.boot.autoconfigure.condition.NoneNestedConditions;
public class EnvironmentConditional {
public static class AnyCloud extends AnyNestedCondition implements CloudEnvironments {
public AnyCloud() {
super(ConfigurationPhase.PARSE_CONFIGURATION);
}
}
public static class NotCloud extends NoneNestedConditions implements CloudEnvironments {
public NotCloud() {
super(ConfigurationPhase.PARSE_CONFIGURATION);
}
}
}
1、その後、私は私のカスタムデータソースに
@Configuration
@Conditional(EnvironmentConditional.AnyCloud.class)
public class CloudDataSource {
@Bean
public DataSource stuff(){
/** CODE **/
}
}
をそれを実装ワンアプリケーションは、条件のすべてを表示する場合は、それが@ConditionalOnPropertyのチェックのいずれかを見ていない意味
- AnyNestedCondition 0 matched 0 did not (EnvironmentConditional.AnyCloud)
一致しました。 (もし私がそれをもっと上げればこの仕事をすることができます、私はそれをもっと乾燥させることができれば好奇心が強いです)。
私は別の内部クラスを実装する静的な内部クラスを持っています...それは私があまりにも深く行っているようです。
私の失火のロジックを微調整して、SpringからのNestedConditionsを利用しながら各環境に単一の@ConditonalOnPropertyを持たせるアプローチがあるかどうかを知ることができます。
やっていることと思われる: 我々はまた、単に、
@Profile("cloud")
の使用は、プロファイル固有の豆またこれを見て
を有効にするには、@ConditionalOnCloudPlatformを作ることができますこれは私がCloudEnvironmentsインターフェイスを必要とせず、代わりにロジックをgetMatchOutcomeのレベルまで動かします。 残念ながら、このロジックはAnyCloudとNoCloudの条件付きチェックで重複していましたが、これは避けたいものでした。 – mcnichol
私は自分の答えをちょうど更新したので、環境に基づいてどのクラウドもクラウドも判断できません。あなたのポイントは1レベル上で有効ですが – Barath
@milkでもConditionalOnCloudPlatformを見ていますhttps://docs.spring.io/spring-boot/docs/2.0.0.BUILD-SNAPSHOT/api/org/springframework/boot/自動構成/条件/ ConditionalOnCloudPlatform.html – Barath