Le déploiement de war échoue dans tomcat en raison de Impossible d'initialiser le contexte car un contexte d'application racine est déjà présent

Dec 26 2020

Je me cogne la tête là-dessus depuis quelques jours. Et je ne comprends vraiment pas d'où vient cette erreur. J'ai déjà suivi quelques fils à ce sujet sur SO, ceci et celui-ci

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)

J'ai écrit un ensemble d'API et j'essaye de le déployer sur le serveur tomcat. Et pendant le déploiement, mon application démarre mais est abandonnée en raison d'un autre contexte déjà présent.

Pourquoi mon application ne démarre pas correctement? Je n'ai qu'un seul fichier war présent dans mon dossier webapps et j'ai supprimé le reste.

Je ne comprends pas non plus de quel fichier web.xml il s'agit.

Réponses

1 LokeshPandey Dec 29 2020 at 21:50

Finalement, j'ai eu le coupable. Je ne sais pas pourquoi j'ai l'impression que la documentation de la session de printemps nécessite beaucoup de travail. Je peux me tromper.

Quoi qu'il en soit, j'utilise un initialiseur qui s'étend AbstractHttpSessionApplicationInitializer, comme mentionné dans la documentation.

public class SessionConfigInitializer extends AbstractHttpSessionApplicationInitializer {

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

Quand j'ai regardé, AbstractHttpSessionApplicationInitializercela faisait cela servletContext.addListener(new ContextLoaderListener(rootAppContext));au démarrage.

Poster ceci au cas où quelqu'un d'autre tomberait dans cette situation pourrait l'aider.

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

Vous devez voir où vous aviez installé votre tomcat et voir le dossier webapp , il y a toutes les applications web dans ce dossier. par exemple dans mon cas: C: \ Program Files \ Apache Software Foundation \ Apache Tomcat 8.0.27 \ webapps

ou consultez C: \ Program Files \ Apache Software Foundation \ Apache Tomcat 8.0.27 \ conf \ Catalina \ localhost si une autre application Web existe en dehors du dossier du serveur tomcat.