gpt4 book ai didi

spring-boot - Togglz + SpringBoot : features always disabled

转载 作者:行者123 更新时间:2023-12-05 06:36:47 27 4
gpt4 key购买 nike

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

@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

问题是,当我开始测试时,该功能始终处于禁用状态。通过调试,我发现应用程序在target/test-classes/conf/features.properties下加载了一个feature.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 自动配置了一些东西,我无法理解问题出在哪里。

提前致谢。

最佳答案

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

所以我的设置几乎遵循 quickstart向导和我做了一些小的调整。感谢dzone article的帮助,我开始工作了。似乎缺少将功能提供程序注入(inject)到 spring bean 中。这意味着如果我有一个 SpringConfiguration.java,我需要添加这段代码:

@Bean
@SuppressWarnings("unchecked")
public FeatureProvider featureProvider() {
return new EnumBasedFeatureProvider(FeatureOptions.class);
}

添加后,检查标志 isActive() 的代码现在按预期返回 (true)

我注意到这篇帖子是 2018 年的,所以我的回答没有太大帮助。最好让 Togglz 网站将其添加到他们的指南中。

请注意,如果您依赖启动器提供的自动配置,那么您似乎可以跳过这些配置,并跳过注册 FeatureProvider bean。看官方攻略here .

干杯

关于spring-boot - Togglz + SpringBoot : features always disabled,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48829027/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com