Togglz + SpringBoot:功能始终禁用

时间:2018-02-16 14:36:46

标签: spring-boot togglz

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

@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枚举是:

public enum MyEnumFeatures implements Feature {

  @Label("Authorization Key")
  AUTHORIZATION_KEY;

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

我的pom.xml包含:

<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(位于我的配置目录中)包含以下行(语法取自here):

AUTHORIZATION_KEY=true

问题在于,当我开始测试时,该功能始终处于禁用状态。通过调试,我发现应用程序在feature.properties下加载target/test-classes/conf/features.properties文件,其中包含:

  #Fri Feb 16 14:01:15 CET 2018
  AUTHORIZATION_KEY=false

似乎是自动生成的。因此,该功能始终处于禁用状态。在执行每个测试用例之前,将特征设置为false重新生成文件。

此外,我试图修改我的测试,引入了愚蠢的@Rule

@Rule
public TogglzRule togglzRule = TogglzRule.allEnabled(MyFeatures.class);

并在每个测试用例开头启用/禁用该功能:

@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以及如何配置它们。我发现here的示例有效,但不清楚原因:SpringBoot会自动配置某些内容,而我无法理解问题所在。

提前致谢。

0 个答案:

没有答案