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. Смотрите официальное руководство здесь .

Ваше здоровье

Другие вопросы по тегам