Togglz:java.lang.IllegalStateException:找不到FeatureManager

Togglz:java.lang.IllegalStateException:找不到FeatureManager,java,spring,spring-mvc,togglz,Java,Spring,Spring Mvc,Togglz,在将Togglz与我的SpringMVC应用程序集成时,我遇到了以下异常 例外情况 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 imple

在将Togglz与我的SpringMVC应用程序集成时,我遇到了以下异常

例外情况

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.
    org.togglz.core.context.FeatureContext.getFeatureManager(FeatureContext.java:53)
    org.togglz.core.manager.LazyResolvingFeatureManager.getDelegate(LazyResolvingFeatureManager.java:24)
    org.togglz.core.manager.LazyResolvingFeatureManager.getCurrentFeatureUser(LazyResolvingFeatureManager.java:49)
    org.togglz.console.TogglzConsoleServlet.isFeatureAdmin(TogglzConsoleServlet.java:75)
    org.togglz.console.TogglzConsoleServlet.service(TogglzConsoleServlet.java:62)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.togglz.servlet.TogglzFilter.doFilter(TogglzFilter.java:100)
以下依赖项在maven中定义-

<dependency>
  <groupId>org.togglz</groupId>
  <artifactId>togglz-core</artifactId>
  <version>2.3.0.Final</version>
</dependency>

<!-- Spring integration (optional) -->
<dependency>
  <groupId>org.togglz</groupId>
  <artifactId>togglz-spring-web</artifactId>
  <version>2.3.0.Final</version>
</dependency>
<!-- Togglz Admin Console -->
<dependency>
  <groupId>org.togglz</groupId>
  <artifactId>togglz-console</artifactId>
  <version>2.3.0.Final</version>
</dependency>
上面的配置应该可以工作,但我得到了“java.lang.IllegalStateException:找不到TogglzConfig或TogglzBootstrap的任何实现。” 添加以下上下文参数后,此错误消失,但现在我已“找不到FeatureManager”


由于某种原因,您的应用程序中似乎无法使用Spring集成。基本上,Togglz使用特定于Spring的
BeanFinder
实现从Spring应用程序上下文中查找实例。这样,Togglz将查找
TogglzConfig
以引导
FeatureManager

我的猜测是,此处的此块无法找到应用程序的
ApplicationContext
。您可以通过设置相应的断点来验证这一点:

还请确保Spring的
ContextLoaderListener
已注册并正确调用。没有它,Togglz查找代码将无法正常工作


我希望这会有所帮助。

我和您有完全相同的问题,我发现我的案例的原因是TogglzFilter在spring上下文中注册TogglzConfig组件之前就开始了。因此,您必须确保在web容器启动的最开始执行spring上下文注册

因此,我对web.xml做了以下更改以解决它

更改前:

<display-name>REST HelloWorld</display-name>
<servlet>
    <servlet-name>rest-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/rest-dispatcher-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>rest-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<!-- Welcome files -->
<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>
REST HelloWorld
休息调度员
org.springframework.web.servlet.DispatcherServlet
上下文配置位置
/WEB-INF/rest-dispatcher-servlet.xml
1.
休息调度员
/
index.jsp
index.html
变更后:

<display-name>REST HelloWorld</display-name>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/rest-dispatcher-servlet.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
    <servlet-name>rest-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>rest-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<!-- Welcome files -->
<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>
REST HelloWorld
上下文配置位置
/WEB-INF/rest-dispatcher-servlet.xml
org.springframework.web.context.ContextLoaderListener
休息调度员
org.springframework.web.servlet.DispatcherServlet
1.
休息调度员
/
index.jsp
index.html
注意,上下文注册的组件扫描在文件rest-dispatcher-servlet.xml中定义

<context:component-scan
    base-package="com.xxx.togglz" />


希望添加更简单的复制步骤能有所帮助。如果我从示例mvc项目开始,然后添加我的togglz配置,则会出现完全相同的错误。
<display-name>REST HelloWorld</display-name>
<servlet>
    <servlet-name>rest-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/rest-dispatcher-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>rest-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<!-- Welcome files -->
<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>
<display-name>REST HelloWorld</display-name>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/rest-dispatcher-servlet.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
    <servlet-name>rest-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>rest-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<!-- Welcome files -->
<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>
<context:component-scan
    base-package="com.xxx.togglz" />