将"Togglz"功能切换库添加到 Spring Boot REST API



我正在尝试使用Togglz库,该库允许您包装应用程序逻辑,并能够使用一些高级策略将其切换为打开或关闭。我正在浏览它的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上此CCD_ 1函数的参数。我看不出他们是如何将其注入到方法/类中的。他们确实展示了如何在yaml中声明特性ENUM,不过,这并不是引用"ENUM";HELLO_ WORLD";传递到前面提到的isActive((方法中,即:

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

在文档的后面,他们最终引用了这个HELLO_WORLD枚举,但我尝试将其添加到我的应用程序.yaml中,我似乎不明白他们是如何将这些Feature枚举注入这些方法的:

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.

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

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

这能在yaml里完成吗?

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

我已经成功地实现了该库——上面提到的代码中唯一需要的更改,或者对于找不到类型为org.togglz.core.user.UserProvider的bean所需的异常,就是再添加一个bean UserProvider。

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

相关内容

  • 没有找到相关文章

最新更新