簡體   English   中英

將“Togglz”功能切換庫添加到 Spring 引導 REST API

[英]Add "Togglz" feature toggle library to Spring Boot REST API

我正在嘗試使用Togglz庫,它允許您包裝應用程序邏輯並能夠使用一些高級策略將其切換為 ON 或 OFF。 我正在瀏覽它的 Spring 引導文檔,雖然它非常簡潔,但我發現它缺少一些不允許我正確測試的信息。

參考: https://www.togglz.org/documentation/spring-boot-starter.html

  1. 我正在運行Spring Boot 2.4.5版本項目,該文檔說要導入依賴項,我這樣做了:
<dependency>
  <groupId>org.togglz</groupId>
  <artifactId>togglz-spring-boot-starter</artifactId>
  <version>2.6.1.Final</version>
</dependency>
  1. 然后文檔說明您可以在 @RestController 上使用自動配置class ,例如
@Controller
public class MyClass {
  private FeatureManager manager;

  public MyClass(FeatureManager manager) {
      this.manager = manager;
  }

  @RequestMapping("/")
  public ResponseEntity<?> index() {
      if (manager.isActive(HELLO_WORLD)) {
           ...
      }
  }
}

這里已經是我有一些我沒有看到解釋的問題,首先,將枚舉“HELLO_WORLD”作為參數傳遞給 FeatureManager 上的isActive() function。 我看不到他們如何將其注入方法/類中。 他們確實展示了如何在 yaml 中聲明功能 ENUM,但是,這不是引用傳遞給前面提到的 isActive() 方法的“HELLO_WORLD”,即:

togglz:
  features:
    FOO:
      enabled: true
    BAR:
      enabled: false

在文檔的下方,他們最終確實引用了這個HELLO_WORLD枚舉,但我嘗試將其添加到我的 application.yaml 中,我似乎無法弄清楚他們是如何將這些功能枚舉注入這些方法的:

togglz:
  enabled: true # Enable Togglz for the application.
  features: # The feature states. Only needed if feature states are stored in application properties.
    HELLO_WORLD:
      enabled: true

該文檔確實解釋了如何為這些功能創建枚舉 class,但他們明確將其列為在 yaml 文件中定義它的替代方法

public enum MyFeatures implements Feature {

    @EnabledByDefault
    @Label("First Feature")
    FEATURE_ONE,

    @Label("Second Feature")
    FEATURE_TWO;
}

@Bean
public FeatureProvider featureProvider() {
    return new EnumBasedFeatureProvider(MyFeatures.class);
}

我也試過這個,當我嘗試運行應用程序時,我得到了更多的 Bean 異常錯誤,即

Description:

Parameter 2 of method featureManager in org.togglz.spring.boot.autoconfigure.TogglzAutoConfiguration$FeatureManagerConfiguration required a bean of type 'org.togglz.core.user.UserProvider' that could not be found.


Action:

Consider defining a bean of type 'org.togglz.core.user.UserProvider' in your configuration.

任何成功使用此庫的人都可以提供輸入如何設置簡單的功能切換嗎? 最終,我希望能夠在應用程序使用發布日期激活策略(即2021-06-30 00:00:00時打開/關閉此功能,以便我可以根據日期時間激活切換。

參考:https://www.togglz.org/documentation/activation-strategies.html

這可以在 yaml 中完成嗎?

我已經成功地實現了庫,只需要在上述代碼中進行更改,或者對於無法找到的類型為org.togglz.core.user.UserProvider的 bean 的異常,需要再添加一個 bean UserProvider。

@Bean
public UserProvider getUserProvider() {
    return new ServletUserProvider("admin");
}

如果您不想使用 Enum,則必須注入自動配置的FeatureProvider並調用featureProvider.getFeatures()以獲取所有可用功能。 然后,您可以使用FeatureManager檢查他們的 state。 我同意這在文檔中並不明顯。

也應該可以通過您的application.yml配置激活策略。 請參閱https://www.togglz.org/documentation/spring-boot-starter.html末尾的示例部分“應用程序屬性”。 它應該如下所示:

togglz.features.FOO:
  enabled: true
  strategy: release-date
  param:
    date: ..
    time: ..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM