【问题标题】:IllegalStateException: Cannot initialize context because there is already a root application context presentIllegalStateException:无法初始化上下文,因为已经存在根应用程序上下文
【发布时间】:2016-12-13 02:57:10
【问题描述】:

在我的应用程序中有 2 个初始化器:一个扩展 AbstractSecurityWebApplicationInitializer,另一个扩展 AbstractAnnotationConfigDispatcherServletInitializer。当我尝试运行应用程序时,我得到了IllegalStateException: Cannot initialize context because there is already a root application context present

如果我理解正确的话,这两个初始化程序都试图创建自己的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

import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;


public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {
    public SecurityWebApplicationInitializer() {
        super(SecurityConfig.class);
    }
}

【问题讨论】:

  • 我猜你的存储库配置 (RepositoryConfig.class) 应该在 getRootConfigClasses 中,而不是在 getServletConfigClasses 中...你能试试吗?
  • @kukkuz 不起作用,同样的异常

标签: java spring spring-mvc


【解决方案1】:

我发现了问题,我不应该在SecurityWebApplicationInitializer 中放置构造函数。构造函数将创建一个新的 ContextLoaderListener。只需删除它,一切正常。

【讨论】:

    猜你喜欢
    • 2012-01-19
    • 2016-02-11
    • 2017-05-09
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多