我尝试遵循Spring Boot 的 Togglz 指南,因此添加了所有必要的依赖项,创建了一个功能枚举:
public enum RetrospectiveBoardFeatures implements Feature {
@Label("Name by cookie")
NAME_BY_COOKIE,
@Label("Name by login")
NAME_BY_LOGIN;
public boolean isActive() {
return FeatureContext.getFeatureManager().isActive(this);
}
}
,配置了一个 EnumBasedFeatureProvider 以使 Spring/Togglz 知道该枚举:
@SpringBootApplication
public class Application {
public static void main(final String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public FeatureProvider featureProvider() {
return new EnumBasedFeatureProvider(RetrospectiveBoardFeatures.class);
}
}
这一切都很好,直到我编写了一个小单元测试来查看功能切换配置是否应用于我的枚举(来自 application.yml):
togglz:
features:
NAME_BY_COOKIE:
enabled: true
NAME_BY_LOGIN:
enabled: false
测试:
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = Application.class)
public class RetrospetiveBoardFeaturesTest {
@Test
public void testCookieFeature() {
assertThat(RetrospetiveBoardFeatures.NAME_BY_COOKIE.isActive(), is(true));
}
}
所以没有达到我的预期结果(功能激活)。然后我添加了默认启用的注释,我的功能被激活了。根据指南(我是如何理解的),我不需要添加任何从 Spring 读取我的配置并让 Togglz 知道它们的内容。GitHub 上的 Togglz 示例在这方面也没有做任何事情(通过查看 Togglz 在 Spring-Boot 启动器中提供的内容,已经设置了一个特性属性提供程序)。也许我选择了一些错误的版本(Spring boot 2.0.1.RELEASE 和 Togglz 2.5.0.Final)?我做错了什么?