0

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

4

1 回答 1

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 配置,这导致了我的问题。

于 2017-12-01T21:59:56.917 回答