2017-02-23 100 views
1

我试图将togglz整合到我的Spring Boot应用程序中,但它看起来好像自动配置难以提供FeatureManager。以下是我的堆栈跟踪:Togglz Spring Boot - 没有功能管理器提供

2017-02-23 16:04:30.033 DEBUG [myService,,,] 23359 --- [ restartedMain] org.togglz.core.context.FeatureContext : No cached FeatureManager for class loader: org.sprin[email protected]6b8005f1 
2017-02-23 16:05:57.403 DEBUG [myService,,,] 23359 --- [ restartedMain] org.togglz.core.context.FeatureContext : Found 5 FeatureManagerProvider implementations... 
2017-02-23 16:06:27.652 DEBUG [myService,,,] 23359 --- [ restartedMain] org.togglz.core.context.FeatureContext : No FeatureManager provided by org.togglz.core.context.ThreadLocalFeatureManagerProvider 
2017-02-23 16:06:36.436 DEBUG [myService,,,] 23359 --- [ restartedMain] org.togglz.core.context.FeatureContext : No FeatureManager provided by org.togglz.core.context.BeanFinderFeatureManagerProvider 
2017-02-23 16:06:45.980 DEBUG [myService,,,] 23359 --- [ restartedMain] org.togglz.core.context.FeatureContext : No FeatureManager provided by org.togglz.core.context.StaticFeatureManagerProvider 
2017-02-23 16:06:51.164 DEBUG [myService,,,] 23359 --- [ restartedMain] org.togglz.core.context.FeatureContext : No FeatureManager provided by org.togglz.core.context.ContextClassLoaderFeatureManagerProvider 
2017-02-23 16:06:55.980 DEBUG [myService,,,] 23359 --- [ restartedMain] o.t.c.c.JNDIFeatureManagerProvider  : FeatureMananger not found: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial 
2017-02-23 16:06:57.990 DEBUG [myService,,,] 23359 --- [ restartedMain] org.togglz.core.context.FeatureContext : No FeatureManager provided by org.togglz.core.context.JNDIFeatureManagerProvider 

与应用程序最终与一个IllegalStateException死亡:

Caused by: java.lang.IllegalStateException: Could not find the FeatureManager. For web applications please verify that the TogglzFilter starts up correctly. In other deployment scenarios you will typically have to implement a FeatureManagerProvider as described in the 'Advanced Configuration' chapter of the documentation. 
    at org.togglz.core.context.FeatureContext.getFeatureManager(FeatureContext.java:53) ~[togglz-core-2.3.0.Final.jar:na] 

我在我的应用程序性能的定义,以及我的配置类togglz.enabled和我togglz.feature-enums性质实现TogglzConfig创建,它似乎是Spring Boot在幕后使用togglz做的事情不是很有效。有没有人遇到过这个问题或知道如何解决?

+0

可以共享代码,你是如何设置的? – xiumeteo

+0

它看起来就像我在构造函数中放置一个togglz isActive检查一样。我有一个DocumentBuilder()构造函数,并在那里做切换检查,当DocumentBuilder()在其他地方实例化时,发生上述错误。如果我在DocumentBuilder中将togglz isActive检查移动到build()方法,事情就可以正常工作。 – deanmau5

+0

你如何使用这些类,你能分享这些代码块吗? – xiumeteo

回答

0

首先,我建议您更新的帖子,包括:

  • 春季启动配置,如果你正在使用
  • 最小特征枚举
  • 的pom.xml

注意春季启动您应该使用以下GAV:

<dependency> 
    <groupId>org.togglz</groupId> 
    <artifactId>togglz-spring-boot-starter</artifactId> 
    <version>2.4.1.Final</version> 
</dependency> 
<dependency> 
    <groupId>org.togglz</groupId> 
    <artifactId>togglz-console</artifactId> 
    <version>2.4.1.Final</version> 
</dependency> 

那么就应该为定义返回豆简单:

  • StateRepository
  • FeatureProvider
  • UserProvider

一个简单的实现,这将是:

@Bean 
public StateRepository getStateRepository() { 
    return new InMemoryStateRepository() 
} 

@Bean 
public FeatureProvider featureProvider() { 
    return new EnumBasedFeatureProvider(MyFeatures.class); 
} 

@Bean 
public UserProvider getUserProvider() { 
    return new NoOpUserProvider(); 
} 

MyFeatures.class是实现的枚举TS功能

,可能是有益的,为您的春季启动设置其它属性包括:

togglz.console.enabled=true 
togglz.console.secured=false 
相关问题