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