Java IllegalStateException:无法初始化上下文,因为已经存在根应用程序上下文
在我的应用程序中有两个初始值设定项:一个扩展Java IllegalStateException:无法初始化上下文,因为已经存在根应用程序上下文,java,spring,spring-mvc,Java,Spring,Spring Mvc,在我的应用程序中有两个初始值设定项:一个扩展AbstractSecurityWebApplicationInitializer,另一个扩展AbstractAnnotationConfigDispatchersServletilizer。当我试图运行应用程序时,我得到了一个anIllegalStateException:无法初始化上下文,因为已经存在根应用程序上下文 如果我理解正确,两个初始化者都试图创建自己的WebApplicationContext。因此,我尝试重写createRootAppl
AbstractSecurityWebApplicationInitializer
,另一个扩展AbstractAnnotationConfigDispatchersServletilizer
。当我试图运行应用程序时,我得到了一个anIllegalStateException:无法初始化上下文,因为已经存在根应用程序上下文
如果我理解正确,两个初始化者都试图创建自己的WebApplicationContext
。因此,我尝试重写createRootApplicationContext()
以强制它返回null。虽然应用程序运行时没有异常,但运行不正确。有没有办法解决这个问题
WebInitializer.java
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { WebConfig.class, AppConfig.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] { RepositoryConfig.class };
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
我发现了问题,我不应该在
SecurityWebApplicationInitializer
中放置构造函数。构造函数将创建一个新的ContextLoaderListener。只要删除它,一切正常。我想您的存储库配置(RepositoryConfig.class
)应该在getRootConfigClasses
中,而不是getServletConfigClasses
中。。。你能试试吗?@kukkuz不起作用,同样的例外
import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;
public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {
public SecurityWebApplicationInitializer() {
super(SecurityConfig.class);
}
}