【问题标题】:Add "Togglz" feature toggle library to Spring Boot REST API将“Togglz”功能切换库添加到 Spring Boot REST API
【发布时间】:2021-08-28 18:33:45
【问题描述】:

我正在尝试使用 Togglz 库,该库允许您包装应用程序逻辑并能够通过一些高级策略将其切换为 ON 或 OFF。我正在浏览它的 Spring Boot 文档,虽然它非常简洁,但我发现它缺少一些无法正确测试的信息。

参考: 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 上使用自动配置类,例如
@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() 函数。我看不到他们如何将其注入方法/类中。他们确实展示了如何在 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

文档确实解释了如何为这些功能创建枚举类,但他们明确将其列为在 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.

任何成功使用此库的人都可以提供输入如何设置简单的功能切换e 吗?最终,我希望能够在应用程序使用 RELEASE DATE activation 策略(即2021-06-30 00:00:00)时打开/关闭此功能,这样我就可以根据日期时间。

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

这可以在 yaml 中完成吗?

【问题讨论】:

    标签: java spring spring-boot togglz featuretoggle


    【解决方案1】:

    我已经成功实现了该库,仅在上述代码中需要更改,或者对于异常需要一个无法找到的 org.togglz.core.user.UserProvider 类型的 bean,是添加一个更多的 bean UserProvider。

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

    【讨论】:

      【解决方案2】:

      如果您不想使用 Enum,则必须注入自动配置的 FeatureProvider 并调用 featureProvider.getFeatures() 以获取所有可用功能。 然后您可以使用FeatureManager 检查它们的状态。 我同意这在文档中并不明显。

      应该也可以通过您的application.yml 配置激活策略。 请参阅https://www.togglz.org/documentation/spring-boot-starter.html 末尾的示例部分“应用程序属性”。 它应该是这样的:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-11
        • 1970-01-01
        • 2020-10-18
        • 1970-01-01
        • 2022-01-14
        • 1970-01-01
        • 2021-10-15
        • 2021-04-24
        相关资源
        最近更新 更多