Не удалось автоматически настроить файл конфигурации с FeatureManager в контроллере - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь реализовать togglz с моим приложением весенней загрузки.Здесь мой подход к этому заключается в двух аспектах.
Во-первых, ниже приведены общие файлы для обоих подходов к использованию.

ToggleController.java

package com.learn.poc.toggle;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.togglz.core.manager.FeatureManager;

@Controller
public class ToggleController {
@Autowired
private FeatureManager manager;


@GetMapping("/testing")
@ResponseBody
String display() {

    if(manager.isActive(MyFeatures.FEATURE_ONE)){
        return "FeatureOne is active woking "+MyFeatures.FEATURE_ONE.isActive();
    }
    else {
        return "FeatureOne is Inactive redirected "+MyFeatures.FEATURE_ONE.isActive();
    }
  }
}

MyFeatures.java

package com.learn.poc.toggle;

import org.togglz.core.Feature;
import org.togglz.core.annotation.Label;
import org.togglz.core.context.FeatureContext;

public enum MyFeatures implements Feature {

@Label("First Feature")
FEATURE_ONE,

@Label("Second Feature")
FEATURE_TWO;

public boolean isActive() {
    return FeatureContext.getFeatureManager().isActive(this);
}
}

Application.properties: (PS: я не хочу устанавливать что-либо непосредственно в свойствах приложения, таких как feature-enum и т. Д.) *

togglz.console.enabled=true
togglz.console.path=/togglz-console
server.servlet.context-path=/api
server.port=8080
togglz.console.use-management-port=false
#togglz.console.secured=false
#togglz.feature-enums=com.learn.poc.toggle.MyFeatures

Теперь для UseCase-1:
Я использую файл конфигурации, реализующий TogglzConfig.
MyTogglzConfiguration.java

package com.learn.poc.toggle;
import java.io.File;
import org.springframework.stereotype.Component;
import org.togglz.core.Feature;
import org.togglz.core.manager.TogglzConfig;
import org.togglz.core.repository.StateRepository;
import org.togglz.core.repository.file.FileBasedStateRepository;
import org.togglz.core.user.FeatureUser;
import org.togglz.core.user.SimpleFeatureUser;
import org.togglz.core.user.UserProvider;

@Component
public class MyTogglzConfiguration implements TogglzConfig {
public Class<? extends Feature> getFeatureClass() {
    return MyFeatures.class;
}
public StateRepository getStateRepository() {
    return new FileBasedStateRepository(new File("PATH\features.properties"));
}
@Override
public UserProvider getUserProvider() {
    return new UserProvider() {
        @Override
        public FeatureUser getCurrentUser() {
            return new SimpleFeatureUser("admin", true);
        }
    };
}
}

Так что, если я следую вышеприведенному пути, он не получает автопровод, то есть не получает файл свойств из пути и не получает никаких свойств вообще..

UseCase-2: Insted Я использовал Spring ConfigFile и создал bean-компонент для отдельного свойства, как показано ниже.
configClass.java

package com.learn.poc.toggle;

import java.io.File;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.togglz.core.manager.EnumBasedFeatureProvider;
import org.togglz.core.repository.StateRepository;
import org.togglz.core.repository.file.FileBasedStateRepository;
import org.togglz.core.spi.FeatureProvider;
import org.togglz.core.user.FeatureUser;
import org.togglz.core.user.SimpleFeatureUser;
import org.togglz.core.user.UserProvider;

@Configuration
public class configClass {

@Bean
public FeatureProvider featureProvider() {
    return new EnumBasedFeatureProvider(MyFeatures.class);
}
@Bean
public StateRepository getStateRepository() {
    System.out.println("in state");
    return new FileBasedStateRepository(new File("PATH\features.properties"));
}

@Bean
public UserProvider getUserProvider() {
    System.out.println("in user provider");
    return new UserProvider() {
        @Override
        public FeatureUser getCurrentUser() {
            return new SimpleFeatureUser("admin", true);
        }
    };
}
}

Если реализовать файл, описанный выше, все работает нормально,Я не знаю, что первый вариант использования не работает.Поскольку в документации по togglz упоминается, что если вы упомянете файл конфигурации как @Component, он будет автоматически подключен для весенней загрузки.
ref: https://www.togglz.org/documentation/configuration.html


Сказано, что:

Togglz offers a special integration module for Spring. This module will automatically search for 
implementations of the TogglzConfig in Spring's ApplicationContext. Therefore you just have to 
declare your implementation as a class managed by Spring. If you are using the Spring annotation 
support you can just add a @Component annotation to your class:
...