ルートアプリケーションコンテキストがすでに存在するため、コンテキストを初期化できないため、Tomcatで戦争の展開が失敗しています

Dec 26 2020

私は数日からこれに頭をぶつけています。そして、私はこのエラーがどこから来ているのか本当にわかりません。私はすでにSO、これ、そしてこれに関するいくつかのスレッドをフォローしました

26-Dec-2020 12:48:18.633 SEVERE [main] org.apache.catalina.core.StandardContext.listenerStart Exception sending context initialized event to listener instance of class [org.springframework.web.context.ContextLoaderListener]
        java.lang.IllegalStateException: Cannot initialize context because there is already a root application context present - check whether you have multiple ContextLoader* definitions in your web.xml!
                at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:263)
                at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103)
                at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4714)
                at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5177)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
                at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)
                at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)
                at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:706)
                at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:978)
                at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1848) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
                at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)

APIのセットを作成し、それをTomcatサーバーにデプロイしようとしています。そして、デプロイ中にアプリケーションが起動しますが、他のコンテキストがすでに存在するために中止されます。

アプリケーションが正常に起動しないのはなぜですか?webappsフォルダーにwarファイルが1つだけあり、残りを削除しました。

また、どのweb.xmlファイルについて話しているのかもわかりません。

回答

1 LokeshPandey Dec 29 2020 at 21:50

ついに犯人になりました。春のセッションのドキュメントに多くの作業が必要だと感じる理由がわかりません。私は間違っている可能性があります。

とにかく、AbstractHttpSessionApplicationInitializerドキュメントに記載されているように、私は拡張するイニシャライザを使用しています。

public class SessionConfigInitializer extends AbstractHttpSessionApplicationInitializer {

    public SessionConfigInitializer() {
        super(SessionConfig.class);
    }
}

私が調べたとき、AbstractHttpSessionApplicationInitializerそれはservletContext.addListener(new ContextLoaderListener(rootAppContext));起動時にこれを行っていました。

他の誰かがこの状況に陥った場合に備えてこれを投稿すると、彼らを助けるかもしれません。

გენომუმლაძე Dec 27 2020 at 00:17

Tomcatをインストールした場所とwebappフォルダーを確認する必要があります。このフォルダーには、すべてのWebアプリケーションがあります。たとえば私の場合:C:\ Program Files \ Apache Software Foundation \ Apache Tomcat 8.0.27 \ webapps

または、tomcatサーバーフォルダーの外部に他のWebアプリケーションが存在する場合は、C:\ Program Files \ Apache Software Foundation \ Apache Tomcat 8.0.27 \ conf \ Catalina \ localhostを参照してください。