5

私はいくつかの(REST)エンドポイントを持つスプリングコントローラーを持っています。私はこのコントローラーの複数のインスタンスを起動し、それぞれのインスタンスでいくつかのエンドポイントを選択的に有効/無効にする必要があります。フィーチャーを反転するアノテーションRESTエンドポイント

これまでのところ、togglzは機能の反転を提供しますが、RESTエンドポイントを有効または無効にしません(togglzは機能を有効にしているかどうかを呼び出し元コードで確認できます)。 ff4jはもう一つの選択肢のようですが、RESTエンドポイントを有効/無効にすることができるかどうかは、ドキュメントからはっきりしませんでした

私はスレッドFeature Toggling Java Annotationsを読んでいますが、構成ファイルで有効/無効にする必要があるエンドポイントを指定し、RESTエンドポイントで注釈を使用して有効/無効にする必要があるパッケージを指定できます(この方法では、メソッドのロジックは変更されずにテストを最小限に抑えます)

答えて

3

@Beanまたは@Componentのクラスは、起動時にBeanビジター機構を介して起動されます。起動時にこのBeanをSpringコンテキストから除外するには、BeanPostProcessorhere)を作成し、専用アノテーションを確認してください。ただし、理解している限り、Beanを実行時にコンテキストに戻すことはできません。

結果として、あなたはリクエストが入って来たときに、正しい操作/モックを実行する(または503 HTTPコードを送信)するために、このBeanは「インテリジェント」にする必要がありますが。

FF4jは確かにあなたは、この動作を実装助けることができませんRESTコントローラの上部にある単一の注釈。あなたはどうすることもできます

  • 専用FF4J注釈
  • とのインタフェースが実装または別のものを選択するために別の名前を持つインターフェースの2つの実装、毎回
  • 使用FF4Jを作成してコメントを付ける、インターフェースを作成します。実行時にここで

いくつかのコードスニペットは、アイデアを得るために:

public interface GreetingService { 
    @Flip(name = "theFeatureIDToToggle", alterBean = "greeting.french") 
    String sayHello(String name); 
} 

@Component("greeting.french") 
public class GreetingServiceFrenchImpl implements GreetingService { 
    public String sayHello(String name) {return "Bonjour " + name; 
} 

@Component("greeting.english") 
public class GreetingServiceEnglishImpl implements GreetingService { 
    public String sayHello(String name) {return "Hello " + name; 
} 

//... import 
@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration("classpath:applicationContext-ff4j-aop-test.xml") 
public class FeatureAdvisorTest { 

    @Autowired 
    private FF4j ff4j; 

    @Autowired 
    @Qualifier("greeting.english") 
    private GreetingService greeting 

    @Test 
    public void testAnnotatedFlipping_with_alterBean() { 
     ff4j.disable("theFeatureIDToToggle"); 
     Assert.assertTrue(greeting.sayHello("CLU").startsWith("Hello")); 

     ff4j.enable("theFeatureIDToToggle"); 
     Assert.assertTrue(greeting.sayHello("CLU").startsWith("Bonjour")); 
    } 
} 

は、あなたが望むように、すべてのサンプルが用意されていhere、単一のメソッドやクラス全体を切り替えることができます。