我有一个大型的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配置,这就是造成我的问题的原因。