首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Togglz + SpringBoot:始终禁用的特性

Togglz + SpringBoot:始终禁用的特性
EN

Stack Overflow用户
提问于 2018-02-16 14:36:45
回答 1查看 896关注 0票数 3

我正在尝试将Togglz集成到Spring应用程序中。由于Togglz自动配置没有成功(没有创建FeatureManager bean,因此也没有创建ApplicationContext ),所以定义了Togglz:

代码语言:javascript
复制
@Configuration
@EnableAutoConfiguration
public class TooglzAppCtxtConfig {

@Bean
public StateRepository stateRepository() throws IOException {
    // Retrieve the configuration directory as Spring Resource...
    Resource confDir = Application.getConfDir();
    Resource applicationProperties = confDir
            .createRelative("features.properties");

    return new FileBasedStateRepository(applicationProperties.getFile());
}

@Bean
public UserProvider userProvider() {
    return new NoOpUserProvider();
}

@Bean
public FeatureManager manager() throws IOException {
    return new FeatureManagerBuilder()
            .featureEnum(MyEnumFeatures.class)
            .stateRepository(this.stateRepository())
            .userProvider(this.userProvider()).build();
}

其中MyEnumFeatures枚举是:

代码语言:javascript
复制
public enum MyEnumFeatures implements Feature {

  @Label("Authorization Key")
  AUTHORIZATION_KEY;

  public boolean isActive() {
      return FeatureContext.getFeatureManager().isActive(this);
  }
}

我的pom.xml包含:

代码语言:javascript
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.togglz</groupId>
    <artifactId>togglz-console</artifactId>
</dependency>
<dependency>
    <groupId>org.togglz</groupId>
    <artifactId>togglz-spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.togglz</groupId>
    <artifactId>togglz-testing</artifactId>
    <version>2.5.0.Final</version>
    <scope>test</scope>
</dependency>

文件features.properties (位于我的配置目录中)包含以下一行(语法取自这里):

代码语言:javascript
复制
AUTHORIZATION_KEY=true

问题是,当我开始测试时,这个特性总是被禁用的。通过调试,我发现应用程序在target/test-classes/conf/features.properties下加载了一个包含以下内容的target/test-classes/conf/features.properties文件:

代码语言:javascript
复制
  #Fri Feb 16 14:01:15 CET 2018
  AUTHORIZATION_KEY=false

似乎是自动生成的。因此,这个功能总是被禁用的。在执行每个测试用例之前,将该文件重新生成,并将其设置为false

此外,我尝试修改我的测试,引入了愚弄的@Rule

代码语言:javascript
复制
@Rule
public TogglzRule togglzRule = TogglzRule.allEnabled(MyFeatures.class);

并在每个测试用例的开头启用/禁用该特性:

代码语言:javascript
复制
@Test
public void isavail_fileExists_Y() throws Exception {

    togglzRule.enable(MyFeatures.AUTHORIZATION_KEY);

    this.mockMvc.perform(get("/isavail?f=QCNjZWkvVGVzdC5wZGYjQA"))
            .andDo(print()).andExpect(status().isOk())
            .andExpect(content().string(containsString("Y")));
}

而且通过这种方式,功能总是被禁用的。

我哪里错了?我需要帮助。

我想解释一下流程中涉及哪些bean,以及如何配置它们。我发现这里起作用的例子,但不清楚为什么: SpringBoot自动配置某些东西,我无法理解问题在哪里。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-07-13 03:50:14

我遇到了类似的问题,因为当我期望FeatureOptions.MY_FEATURE_1.isActive()为true时,它总是返回false。

因此,我的设置基本上是遵循快速启动指南,我做了一些小的调整。多亏了dzone文章的帮助,我才让它开始工作。似乎缺少的是将特性提供程序注入spring中。这意味着如果我有一个SpringConfiguration.java,我需要添加以下代码:

代码语言:javascript
复制
@Bean
@SuppressWarnings("unchecked")
public FeatureProvider featureProvider() {
    return new EnumBasedFeatureProvider(FeatureOptions.class);
}

添加此代码后,用于检查标志isActive()的代码将按预期返回(true)

我注意到这篇文章是2018年发布的,所以我的回答没有多大帮助。也许最好让Togglz站点将这个添加到他们的指南中。

请注意,如果您依赖于初学者提供的自动配置,那么您似乎可以跳过这些配置,并跳过注册FeatureProvider bean。见官方指南这里

干杯

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48829027

复制
相关文章

相似问题

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