首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加"Togglz“功能切换库到

添加"Togglz“功能切换库到
EN

Stack Overflow用户
提问于 2021-06-11 20:55:11
回答 2查看 666关注 0票数 2

我正在尝试使用Togglz库,它允许您包装应用程序逻辑,并能够使用一些高级策略打开或关闭应用程序逻辑。我正在阅读Spring文档,虽然它非常简洁,但我发现它缺少了一些信息,无法正确地测试这些信息。

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

  1. 我正在运行一个SpringBoot2.4.5版本项目,这个文档说要导入依赖项,我这样做了:

代码语言:javascript
复制
<dependency>
  <groupId>org.togglz</groupId>
  <artifactId>togglz-spring-boot-starter</artifactId>
  <version>2.6.1.Final</version>
</dependency>

文档然后声明您可以在@RestController,上使用自动配置类,比如。

代码语言:javascript
复制
@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()方法的“isActive”,即:

代码语言:javascript
复制
togglz:
  features:
    FOO:
      enabled: true
    BAR:
      enabled: false

在进一步的文档中,他们最终引用了这个HELLO_WORLD枚举,但是我尝试将它添加到我的application.yaml中,我似乎无法弄清楚它们是如何将这些特性enum注入到这些方法中的:

代码语言:javascript
复制
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

文档确实解释了如何为这些特性创建enum类,,但是他们明确地列出了它作为在yaml文件中定义它的替代方法。

代码语言:javascript
复制
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异常错误,即

代码语言:javascript
复制
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.

,任何成功使用过这个库的人都能提供输入,如何设置一个简单的特性,toggl_e?最终,我希望能够在应用程序使用发布日期 _activation策略(即2021-06-30 00:00:00 )时打开/关闭该功能,这样我就可以根据日期时间激活切换。

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

在yaml中能做到这一点吗?

EN

回答 2

Stack Overflow用户

发布于 2021-11-30 15:09:12

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

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

代码语言:javascript
复制
togglz.features.FOO:
  enabled: true
  strategy: release-date
  param:
    date: ..
    time: ..
票数 1
EN

Stack Overflow用户

发布于 2021-11-30 13:18:22

我成功地实现了库,仅更改了上述代码中所需的内容,或者对于所需的例外情况,无法找到的org.togglz.core.user.UserProvider类型的bean是多添加一个bean UserProvider。

代码语言:javascript
复制
@Bean
public UserProvider getUserProvider() {
    return new ServletUserProvider("admin");
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67943376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档