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
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
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é, AbstractHttpSessionApplicationInitializer
cela 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.
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.