2016-08-07 9 views
0

私のアプリケーションには2つのイニシャライザがあります:1つはAbstractSecurityWebApplicationInitializer、もう1つはAbstractAnnotationConfigDispatcherServletInitializerです。アプリケーションを実行しようとすると、私はIllegalStateException: Cannot initialize context because there is already a root application context presentIllegalStateException:既にルートアプリケーションコンテキストが存在するため、コンテキストを初期化できません

私は正しく理解して、両方のイニシャライザは、独自の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); 
    } 
} 
+0

あなたのリポジトリ設定( 'RepositoryConfig.class')は' getRootConfigClasses'の中で 'getServletConfigClasses'の中になければなりません。 – kukkuz

+0

@kukkuzは動作しません、同じ例外 –

答えて

2

私は私がSecurityWebApplicationInitializerでコンストラクタを置くことになっていないよ、問題を発見しました。コンストラクタは新しいContextLoaderListenerを作成します。それを取り除くだけで、すべて正常に動作します。

関連する問題