Contexte d'Application chargé à deux reprises - le Printemps de Démarrage

J'ai un assez simple d'installation. Un projet maven avec 3 modules : core/webapp/modèle. Je suis l'aide de Printemps de démarrage de la vitesse de ma demande. Dans webapp, j'ai une classe simple WebappConfig comme suit:

@Configuration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = @ComponentScan.Filter(Configuration.class))
public class WebappConfig {

    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(WebappConfig.class);
        app.setAdditionalProfiles("dev");
        app.run(args);
    }
}

et quelques classes de base/le module de modèle. Mon conteneur-point d'application est :

public class AbcdXml extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(WebappConfig.class);
    }

}

Et pas de web.xml! Mon modèle pom a la suite du printemps de démarrage liés à la dépendance :

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

Core pom.xml :

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-batch</artifactId>
</dependency>

Maintenant en cours d'exécution WebappConfig via Exécuter en tant qu' -> Java application fonctionne parfaitement mais j'ai besoin de déployer le projet comme une guerre sur tomcat7. Webapp emballage est la guerre. Il n'y a pas de tomcat fourni pot en lib sauf tomcat-jdbc et tomcat-tuli pot(il ne devrait pas être un problème?).

Lorsque je déploie mon abcd.la guerre, applicationcontext devient chargé à deux reprises et le résultat dans d'erreur suivant stracktrace :

2014-06-27 11:06:08.445  INFO 23467 --- [ost-startStop-1] o.a.c.c.C.[.[localhost].[/abcd]        : Initializing Spring embedded WebApplicationContext
2014-06-27 11:06:08.446  INFO 23467 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 19046 ms
2014-06-27 11:06:21.308  INFO 23467 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
2014-06-27 11:06:21.313  INFO 23467 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'errorPageFilter' to: [/*]
2014-06-27 11:06:21.314  INFO 23467 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2014-06-27 11:06:26.073  INFO 23467 --- [ost-startStop-1] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'default'
2014-06-27 11:06:26.127  INFO 23467 --- [ost-startStop-1] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [
name: default
...]
2014-06-27 11:06:26.511  INFO 23467 --- [ost-startStop-1] org.hibernate.Version                    : HHH000412: Hibernate Core {4.3.1.Final}
2014-06-27 11:06:26.521  INFO 23467 --- [ost-startStop-1] org.hibernate.cfg.Environment            : HHH000206: hibernate.properties not found
2014-06-27 11:06:26.527  INFO 23467 --- [ost-startStop-1] org.hibernate.cfg.Environment            : HHH000021: Bytecode provider name : javassist
//some info messages from spring boot
2014-06-27 11:07:31.664  INFO 23467 --- [ost-startStop-1] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2014-06-27 11:07:33.095  INFO 23467 --- [ost-startStop-1] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2014-06-27 11:07:33.096  INFO 23467 --- [ost-startStop-1] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2014-06-27 11:07:36.080  INFO 23467 --- [ost-startStop-1] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2014-06-27 11:08:49.583  INFO 23467 --- [ost-startStop-1] o.s.boot.SpringApplication               : Started application in 183.152 seconds (JVM running for 210.258)
2014-06-27 11:12:29.229 ERROR 23467 --- [ost-startStop-1] o.a.c.c.C.[.[localhost].[/abcd]        : 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:277)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4937)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:976)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1653)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)

Il n'y a pas de web.xml comme je l'ai mentionné plus tôt.

Peu de choses intéressantes que je ne peux pas comprendre pourquoi :

  1. Après l'explosion de la guerre, tomcat en quelque sorte créer un dossier RACINE par défaut web.xml[Doit être le Printemps de démarrage d'une mauvaise configuration. Comment puis-je la corriger? Les pointeurs s'il vous plaît?]
  2. Même si je retourne même l '"application" SpringApplicationBuilder dans AbcdXml.java je suis confronté au même problème de applicationcontext chargé à deux reprises.

Merci pour votre aide!

EDIT 1:

Contenu de web.xml qui est généré dans le dossier RACINE :

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd" version="2.5">
</web-app>
  • Quel est le mystérieux web.xml contient-il?
  • celui qui est généré dans le dossier RACINE? mise à jour en question.
  • Qui a l'air inoffensif. Mais vous avez un ContextLoaderListener dans la trace de la pile qui semble erroné. Peut-être que vous pourriez commencer avec un seul fichier war (fossé, les deux autres) et de reproduire le problème, puis de publier un lien vers l'ensemble du projet?
  • Ainsi, le modèle de l'emballage est jar, core est jar et de la dépendance entre les modules est d'habitude. Besoins de base module et webapp besoins de base. Peut-être que je manque quelque chose ici, quand vous avez dit "Fossé de deux autres"? Il y a une guerre de toute façon!
  • Juste essayer de réduire la surface. Peut-être que l'un de vos pots a un WebApplicationInitilaizer - t-il?
  • Ouais, mais je ne pouvais pas trouver toutes les délinquance de la classe. Voici la liste des pots dans le dossier lib - oi62.tinypic.com/of62yx.jpg juste au cas où si c'est utile.
  • jersey-spring3 est probablement le coupable. Il y a quelques utilitaires pour travailler avec jersey ici: github.com/dsyer/spring-boot-jersey. L'une des choses qu'il n'est de prévenir le Jersey à partir de la tentative de créer un Printemps contexte.
  • Yep, c'était bien ça. N'aurais jamais deviné. Merci @DaveSyer 🙂 je peux accepter/upvote votre solution si vous post ci-dessus à titre de réponse, sinon je vais le poster quand même pour qu'il puisse aider les autres.

InformationsquelleAutor magiclko | 2014-06-27