2015-10-13 33 views
5

Tôi có bộ điều khiển lò xo với một số điểm cuối (REST). Tôi muốn đưa ra nhiều trường hợp của bộ điều khiển này, trong đó mỗi trường hợp sẽ có vài điểm cuối được bật/tắt có chọn lọc.Chú thích cho tính năng lật các điểm cuối REST

Dựa trên đọc của tôi cho đến nay, togglz cung cấp tính năng lật, nhưng không bật/tắt các điểm cuối REST (togglz cung cấp API để mã người gọi có thể kiểm tra xem tính năng có được bật); ff4j có vẻ là một giải pháp thay thế khác, nhưng nó không rõ ràng từ tài liệu nếu nó có thể bật/tắt các điểm kết thúc REST

Tôi đọc chủ đề Feature Toggling Java Annotations nhưng thực thi lâu hơn. Có bất kỳ gói nào mà tôi có thể sử dụng để chỉ định các điểm cuối cần được bật/tắt trong tệp cấu hình và sử dụng chú thích trên thiết bị đầu cuối REST để vô hiệu hóa/bật chúng hay không (theo cách này, phương pháp của tôi không bị ảnh hưởng và giảm thiểu thử nghiệm)

Trả lời

3

Một lớp học với @Bean hoặc @Component sẽ được tải vào mùa xuân khi khởi động thông qua cơ chế khách truy cập đậu. Để loại trừ bean này khỏi bối cảnh Spring lúc khởi động, bạn có thể tạo một BeanPostProcessor (here) và kiểm tra chú thích chuyên dụng NHƯNG theo như tôi hiểu, bạn không thể đưa bean trở lại ngữ cảnh khi chạy.

Do đó, bạn phải chắc đậu này 'thông minh' để thực hiện các hoạt động chính xác/giả (hoặc gửi 503 mã HTTP) khi yêu cầu đến ở.

FF4j có thể thực sự giúp bạn thực hiện hành vi này nhưng không phải với một chú thích đơn trên đầu bộ điều khiển REST của bạn. Những gì bạn có thể làm:

  • Tạo một giao diện, chú thích giao diện với các chú thích FF4J chuyên
  • Tạo 2 triển khai của giao diện, mỗi lần với một cái tên khác
  • Sử dụng FF4J để lựa chọn một thực hiện hay cách khác trong thời gian chạy.

Dưới đây một số đoạn mã để có được những ý tưởng:

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")); 
    } 
} 

Bạn có thể chuyển đổi một phương pháp đơn lẻ hoặc cả lớp, như bạn muốn tất cả các mẫu có sẵn here.

Các vấn đề liên quan