3

我正在尝试将 Togglz 集成到 Spring Boot Web 应用程序中。由于我没有成功使用 Togglz 自动配置(没有FeatureManager创建 bean,因此ApplicationContext没有创建 bean),我定义了 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(位于我的配置目录中)包含以下行(语法取自此处):

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以及如何配置它们。我在这里找到的示例有效,但不清楚原因:SpringBoot 自动配置某些东西,我无法理解问题出在哪里。

提前致谢。

4

0 回答 0