我正在尝试将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会自动配置某些内容,而我无法理解问题所在。
提前致谢。