[英]Add "Togglz" feature toggle library to Spring Boot REST API
我正在嘗試使用Togglz庫,它允許您包裝應用程序邏輯並能夠使用一些高級策略將其切換為 ON 或 OFF。 我正在瀏覽它的 Spring 引導文檔,雖然它非常簡潔,但我發現它缺少一些不允許我正確測試的信息。
參考: https://www.togglz.org/documentation/spring-boot-starter.html
<dependency>
<groupId>org.togglz</groupId>
<artifactId>togglz-spring-boot-starter</artifactId>
<version>2.6.1.Final</version>
</dependency>
@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.