Togglz + SpringBoot: функции всегда отключены
Я пытаюсь интегрировать Togglz в веб-приложение Spring Boot. Так как мне не удалось с автоконфигурацией Togglz (нет FeatureManager
боб был создан и, следовательно, ApplicationContext
не был создан), я определил бобы Togglz:
@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
enum это:
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")));
}
Также, таким образом, функция всегда отключена.
Где я не прав? Мне нужна помощь.
Я хотел бы получить объяснение того, какие компоненты участвуют в процессе и как их настроить. Примеры, которые я нашел здесь, работают, но не понятно почему: SpringBoot автоматически настраивает что-то, и я не могу понять, в чем проблема.
Заранее спасибо.
1 ответ
У меня аналогичная проблема, поскольку FeatureOptions.MY_FEATURE_1.isActive() всегда возвращает false, когда я ожидаю, что это правда.
Таким образом, моя настройка в значительной степени соответствует краткому руководству, и я внес небольшие изменения. Благодаря помощи статьи dzone у меня все получилось. Похоже, что отсутствует вставка поставщика функций в бины Spring. Это означает, что если у меня есть SpringConfiguration.java, мне нужно добавить этот код:
@Bean
@SuppressWarnings("unchecked")
public FeatureProvider featureProvider() {
return new EnumBasedFeatureProvider(FeatureOptions.class);
}
После добавления этого код для проверки флага isActive() теперь возвращает ожидаемое значение (true)
Я заметил, что сообщение было от 2018 года, поэтому мой ответ мало чем помогает. Возможно, лучше попросить сайт Togglz добавить это в свое руководство.
Обратите внимание, что если вы полагаетесь на автоматическую настройку, предоставленную стартером, то, похоже, вы можете пропустить создание этой конфигурации и пропустить регистрацию bean-компонента FeatureProvider. Смотрите официальное руководство здесь .
Ваше здоровье