1

我正在尝试使用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”作为参数传递给isActive()FeatureManager 上的这个函数。我看不到他们如何将其注入方法/类中。他们确实展示了如何在 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.

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

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

这可以在yaml中完成吗?

4

2 回答 2

0

我已经成功地实现了库,只需要在上述代码中进行更改,或者对于需要org.togglz.core.user.UserProvider找不到类型的 bean 的异常,需要再添加一个 bean UserProvider。

@Bean
public UserProvider getUserProvider() {
    return new ServletUserProvider("admin");
}
于 2021-11-30T13:18:22.290 回答
0

如果您不想使用 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: ..

于 2021-11-30T15:09:12.190 回答