2017-10-19 7 views
0

最近、フィーチャーを機能させるために新しいprofileを作成するように求められました。プロファイルがアクティブである場合、最後の2行を実行する必要はありませんが、上記のクラスでは@Profileと@ConditionalOnProperty

class A { 

    public void configure(AuthenticationManagerBuilder auth) throws Exception { 
     SecurityConfigurer ldapConfigurer = securityFactory.ldapAuthenticationProviderConfigurer(); 
     ldapConfigurer.configure(auth); 
     SecurityConfigurer offlineConfigurer = securityFactory.offlineAuthenticationProviderConfigurer(); 
     offlineConfigurer.configure(auth); 
    } 

} 

:私は変更を加える必要があり二つの状況があります。私はクラスを拡張し、新しいプロファイル@Profile("notOffline")を割り当て、元のクラスでは@Profile("!notOffline")を入れました。

class A { 

    public void configure(AuthenticationManagerBuilder auth) throws Exception { 
     SecurityConfigurer ldapConfigurer = securityFactory.ldapAuthenticationProviderConfigurer(); 
     ldapConfigurer.configure(auth); 
     SecurityConfigurer offlineConfigurer = securityFactory.offlineAuthenticationProviderConfigurer(); 
     offlineConfigurer.configure(auth); 
    } 

} 

    class B extends A { 
     @Override 
     public void configure(AuthenticationManagerBuilder auth) throws Exception { 
      super(); 
      SecurityConfigurer offlineConfigurer = securityFactory.offlineAuthenticationProviderConfigurer(); 
      offlineConfigurer.configure(auth); 
     } 

    } 

私はリファクタリングする必要がある第二位は次のようなものです:実行されるされていない行は、そのメソッドを使用し、残りの変数に依存し、それが何であるかではありません

class C { 

public Something foo() { 
    code(); 
    code(); 
    code(); 
    thisLineHasNotToBeExecuted(); 
    code(); 
    code(); 
    return something; 
    } 

} 

戻る。私が前に行ったアプローチは、このケースにとっては幸いではありません(実行されないこのメソッドを呼び出す2つのメソッドがあります)。

しばらくすると、@Valueと注釈されている最後のクラスにプロパティを追加し、起動時にtomcatに引数を渡すのが良い方法だと気づきました。このようにしてをthisLineHasNotToBeExecuted()に入れると、class Aとその子に@ConditionalOnPropertyを使用できます。

私のアプローチは正しいですか?

さらに詳しい情報:私はActiveDirectoryを使用するときフェイルオーバー認証を有効にし、2番目のクラスではユーザー情報をキャッシュに保存しないようにしています。

ありがとうございます!

答えて

1

最初のケースでプロファイルを使用するのが適切です。

'@ConditionalOnProperty'は、2番目のユースケースを処理する正しい方法ではありません。これは、通常、Springブートスタータープロジェクトを使用したスタートアップコンフィギュレーションに使用されます。

「thisLineHasNotToBeExecuted();」を実行するかどうかを判断するためにプロパティを使用し、正しい軌道上にあります。その1行の実行がプロファイルに依存する場合は、アクティブなプロファイルをクラスに注入し、その値をキーオフすることができます。スプリングブート設定サーバーを使用している場合は、必ず「@ RefreshScope」を追加してください。