当我的Spring应用程序运行时,它没有使用我的TogglzConfig文件

时间:2017-12-01 21:27:57

标签: java spring spring-mvc togglz

我有一个大型的Spring应用程序,它只使用注释而没有XML。我对这个应用程序做了一些更改,并且有一个单独的项目,应该是几乎所有相同的代码。但是,在这个单独的项目中,Togglz似乎使用某种默认配置而不是我设置的TogglzConfig文件。

出现问题的第一个迹象是当我无法访问Togglz控制台时。尽管我的配置设置为允许任何人使用它(如Togglz网站上所示),但我收到403 Forbidden错误。然后,我做了一些测试并尝试查看功能列表,当我调用FeatureContext.getFeatureManager()时,列表为空.getFeatures()尽管我的Feature类包含了几个功能。这就是我认为它使用某种默认值的原因。

TogglzConfiguration.java

public enum Features implements Feature {

  FEATURE1,

  FEATURE2,

  FEATURE3,

  FEATURE4,

  FEATURE5;

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

TogglzConfiguration.java

@Component
public class TogglzConfiguration implements TogglzConfig {

  public Class<? extends Feature> getFeatureClass() {
    return Features.class;
  }

  public StateRepository getStateRepository() {
    File properties = [internal call to property file];
    try {
      return new FileBasedStateRepository(properties);
    } catch (Exception e) {
      throw new TogglzConfigException("Error getting Togglz configuration from " + properties + ".", e);
    }
  }

  @Override
  public UserProvider getUserProvider() {
    return new UserProvider() {
      @Override
      public FeatureUser getCurrentUser() {
        return new SimpleFeatureUser("admin", true);
      }
    };
  }
}

SpringConfiguration.java

@EnableTransactionManagement
@Configuration
@ComponentScan(basePackages = { "root package for the entire project" }, excludeFilters =
    @ComponentScan.Filter(type=FilterType.ANNOTATION, value=Controller.class))
public class SpringConfiguration {

    @Bean
    public TransformerFactory transformerFactory() {
        return TransformerFactory.newInstance();
    }

    @Bean
    public DocumentBuilderFactory documentBuilderfactory() {
        return DocumentBuilderFactory.newInstance();
    }

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

我的项目找到了一堆使用@Component注释设置的其他bean。我不知道问题是这个组件根本没有被拾取,或者Togglz是否由于某种原因没有使用它。我尝试打印FeatureContext.getFeaturemanager()返回的FeatureManager的名称,它是FallbackTestFeatureManager,所以这似乎证实了我怀疑它根本就没有使用我的配置。

任何人对我可以检查的内容有任何想法?我完全没有想法,特别是因为这是在我的机器上使用几乎完全相同的IntelliJ项目。我无法找到Togglz设置或Spring配置的不同之处。在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我终于有了灯泡时刻并解决了这个问题。如果其他人有类似的问题,似乎我的错误是将Togglz测试和JUnit依赖项添加到我的项目中,但不限制它们到测试范围。我忽略了该网站的那一部分。

<!-- Togglz testing support -->
<dependency>
  <groupId>org.togglz</groupId>
  <artifactId>togglz-testing</artifactId>
  <version>2.5.0.Final</version>
  <scope>test</scope>
</dependency>

如果没有该范围,我认为这些覆盖了我使用默认测试配置创建的Togglz配置,这导致了我的问题。