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

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

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配置有什么不同。在此先感谢您的帮助。

最佳答案

我终于有了灯泡的瞬间,解决了这个问题。万一其他人有类似的问题,似乎我的错误是将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配置,这就是造成我的问题的原因。

10-04 17:55