Spring Boot: impossible de démarrer EmbeddedWebApplicationContext en raison d’un bean EmbeddedServletContainerFactory manquant

Je suis totalement nouveau au spring et j’ai commencé à faire les guides officiels de ce site: https://spring.io/guides

Je voudrais faire ce guide: https://spring.io/guides/gs/scheduling-tasks/

J’ai l’exception suivante:

2014-02-14 16:25:21.614 INFO 9032 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.scheduling.annotation.SchedulingConfiguration' of type [class org.springframework.scheduling.annotation.SchedulingConfiguration$$EnhancerByCGLIB$$5b48d763] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2014-02-14 16:25:21.638 INFO 9032 --- [ main] .clClasspathLoggingApplicationListener : Application failed to start with classpath: [file:/C:/work/Spring/SpringTutorial/target/classes/, file:/C:/work/apache-maven-3.0.3/repo/javax/servlet/javax.servlet-api/3.0.1/javax.servlet-api-3.0.1.jar, file:/C:/work/apache-maven-3.0.3/repo/org/springframework/boot/spring-boot-starter/1.0.0.RC1/spring-boot-starter-1.0.0.RC1.jar, file:/C:/work/apache-maven-3.0.3/repo/org/springframework/boot/spring-boot/1.0.0.RC1/spring-boot-1.0.0.RC1.jar, file:/C:/work/apache-maven-3.0.3/repo/org/springframework/spring-core/4.0.0.RELEASE/spring-core-4.0.0.RELEASE.jar, file:/C:/work/apache-maven-3.0.3/repo/org/springframework/spring-context/4.0.0.RELEASE/spring-context-4.0.0.RELEASE.jar, file:/C:/work/apache-maven-3.0.3/repo/org/springframework/boot/spring-boot-autoconfigure/1.0.0.RC1/spring-boot-autoconfigure-1.0.0.RC1.jar, file:/C:/work/apache-maven-3.0.3/repo/org/springframework/boot/spring-boot-starter-logging/1.0.0.RC1/spring-boot-starter-logging-1.0.0.RC1.jar, file:/C:/work/apache-maven-3.0.3/repo/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar, file:/C:/work/apache-maven-3.0.3/repo/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar, file:/C:/work/apache-maven-3.0.3/repo/org/slf4j/jul-to-slf4j/1.7.5/jul-to-slf4j-1.7.5.jar, file:/C:/work/apache-maven-3.0.3/repo/org/slf4j/log4j-over-slf4j/1.7.5/log4j-over-slf4j-1.7.5.jar, file:/C:/work/apache-maven-3.0.3/repo/ch/qos/logback/logback-classic/1.0.13/logback-classic-1.0.13.jar, file:/C:/work/apache-maven-3.0.3/repo/ch/qos/logback/logback-core/1.0.13/logback-core-1.0.13.jar, file:/C:/work/apache-maven-3.0.3/repo/org/springframework/boot/spring-boot-starter-web/1.0.0.RC1/spring-boot-starter-web-1.0.0.RC1.jar, file:/C:/work/apache-maven-3.0.3/repo/org/springframework/boot/spring-boot-starter-tomcat/1.0.0.RC1/spring-boot-starter-tomcat-1.0.0.RC1.jar, file:/C:/work/apache-maven-3.0.3/repo/org/apache/tomcat/embed/tomcat-embed-core/7.0.47/tomcat-embed-core-7.0.47.jar, file:/C:/work/apache-maven-3.0.3/repo/org/apache/tomcat/embed/tomcat-embed-logging-juli/7.0.47/tomcat-embed-logging-juli-7.0.47.jar, file:/C:/work/apache-maven-3.0.3/repo/org/springframework/spring-web/4.0.0.RELEASE/spring-web-4.0.0.RELEASE.jar, file:/C:/work/apache-maven-3.0.3/repo/aopalliance/aopalliance/1.0/aopalliance-1.0.jar, file:/C:/work/apache-maven-3.0.3/repo/org/springframework/spring-aop/4.0.0.RELEASE/spring-aop-4.0.0.RELEASE.jar, file:/C:/work/apache-maven-3.0.3/repo/org/springframework/spring-beans/4.0.0.RELEASE/spring-beans-4.0.0.RELEASE.jar, file:/C:/work/apache-maven-3.0.3/repo/org/springframework/spring-webmvc/4.0.0.RELEASE/spring-webmvc-4.0.0.RELEASE.jar, file:/C:/work/apache-maven-3.0.3/repo/org/springframework/spring-expression/4.0.0.RELEASE/spring-expression-4.0.0.RELEASE.jar, file:/C:/work/apache-maven-3.0.3/repo/com/fasterxml/jackson/core/jackson-databind/2.3.1/jackson-databind-2.3.1.jar, file:/C:/work/apache-maven-3.0.3/repo/com/fasterxml/jackson/core/jackson-annotations/2.3.0/jackson-annotations-2.3.0.jar, file:/C:/work/apache-maven-3.0.3/repo/com/fasterxml/jackson/core/jackson-core/2.3.1/jackson-core-2.3.1.jar, file:/C:/work/apache-maven-3.0.3/repo/commons-lang/commons-lang/2.2/commons-lang-2.2.jar] Exception in thread "main" org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean. at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:140) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:476) at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:124) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:658) at org.springframework.boot.SpringApplication.run(SpringApplication.java:355) at org.springframework.boot.SpringApplication.run(SpringApplication.java:920) at org.springframework.boot.SpringApplication.run(SpringApplication.java:909) at hu.kumite.Application.main(Application.java:17) Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean. at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:190) at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:163) at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:137) ... 7 more 

La classe de démarrage de l’application est la suivante:

 @ComponentScan @EnableAutoConfiguration public class Application { public static void main(Ssortingng[] args) { //SpringApplication.run(Application.class, args); SpringApplication.run(ScheduledTasks.class, args); } } 

Comme vous pouvez le voir, la méthode principale contient une ligne commentée. J’ai déjà fait un tutoriel, à savoir celui-ci: https://spring.io/guides/gs/consuming-rest/ Mais je ne peux pas exécuter l’application ScheduledTasks, qui est la suivante:

 @EnableScheduling public class ScheduledTasks { private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); @Scheduled(fixedRate = 5000) public void reportCurrentTime() { System.out.println("The time is now " + dateFormat.format(new Date())); } } 

J’utilise Eclipse et exécute le main de Application.java en tant qu’application. Quelqu’un pourrait-il m’aider s’il vous plaît?

Le guide de planification n’est pas une application Web. Vous avez donc probablement des problèmes avec votre pom.xml à partir du guide REST? Si vous suivez les instructions de près, cela devrait fonctionner. Un autre problème potentiel avec le code que vous avez posté ci-dessus est que votre classe @EnableAutoConfiguration n’est pas utilisée dans le contexte, uniquement comme méthode principale (ce qui peut ne pas être un problème pour le guide de planification, mais probablement pour d’autres).

Une parsing de @SpringBootApplication indique qu’il inclut les annotations suivantes:

 @Configuration @ComponentScan @EnableAutoConfiguration 

Donc, vous pouvez le faire aussi:

 @SpringBootApplication public class Application { public static void main(Ssortingng[] args) { SpringApplication.run(ScheduledTasks.class, args); } } 

utilisez celui-ci dans votre pom.xml:

  org.springframework.boot spring-boot-starter-web  

ou celui-ci:

  org.springframework.boot spring-boot-starter-tomcat  

Essaye ça

 @Configuration @ComponentScan @EnableAutoConfiguration public class Application { public static void main(Ssortingng[] args) { SpringApplication.run(ScheduledTasks.class, args); } } 

L’erreur suggère que l’application que vous essayez d’exécuter ne peut pas instancier une instance d’Apache Tomcat. Assurez-vous que vous exécutez l’application avec tomcat.

si, après avoir vérifié toutes vos dépendances, vous rencontrez le même problème, essayez d’append ce qui suit dans votre classe de configuration

  @Bean public EmbeddedServletContainerFactory servletContainer() { TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory(); return factory; } 

Si vous utilisez une instance externe de tomcat (en particulier pour intelij), le problème peut être que l’EDI tente de démarrer le tomcat intégré. Dans ce cas, supprimez les éléments suivants de votre fichier pom.xml, puis configurez le tomcat externe à l’aide de l’assistant “Modifier les configurations”.

   org.springframework.boot spring-boot-starter-tomcat provided  

J’avais plusieurs classes d’application dans un projet Spring Boot qui incluait le Web et je voulais éviter de configurer un environnement Web pour l’un d’entre eux. Je l’ai donc configuré manuellement comme suit:

 @SpringBootApplication public class Application { public static void main(Ssortingng[] args) { new SpringApplicationBuilder(Application.class).web(false).run(args); } } 

UPDATE pour Spring Boot 2 et supérieur:

 @SpringBootApplication public class Application { public static void main(Ssortingng[] args) { new SpringApplicationBuilder(Application.class).web(WebApplicationType.NONE).run(args); } } 

Ajouter

   org.springframework.boot spring-boot-starter-web  

Si vous rencontrez cette exception lors de l’utilisation de intellij et que vous essayez de démarrer l’application avec le bouton run . Essayez plutôt de lancer l’application à partir de la ligne de commande. Par exemple, assurez-vous que vous êtes dans le bon répertoire (répertoire avec votre fichier pom) en supposant que ceci est une application springboot exécutée mvn spring-boot:run fait l’affaire pour moi.

En outre, j’ai également vu cette erreur se produire lorsque votre application Spring dépend d’une autre application. Dans ce cas, je devais d’abord démarrer l’autre application puis exécuter.

J’ai eu des problèmes similaires lorsque la méthode principale est sur une classe différente de celle transmise à SpringApplcation.run ()

La solution serait donc d’utiliser la ligne que vous avez commentée:

 public class Application { public static void main(Ssortingng[] args) { SpringApplication.run(Application.class, args); } } 

Ajouter l’annotation @SpringBootApplication Avant que la classe de démarrage ne @SpringBootApplication ce problème pour moi (donc, ce message d’erreur peut signifier essentiellement “vous n’avez pas de classe marquée @SpringBootApplication , vous en avez besoin d’au moins un)

 @SpringBootApplication public class AppStarter { public static void main(Ssortingng[] args) { SpringApplication.run(AppStarter.class, args); } } 

Si vous le conditionnez en tant que fichier simple et que ce n’est pas une application Web, essayez de charger le contexte de l’application comme indiqué ci-dessous.

 @SpringBootApplication ApplicationContext ctx = new AnnotationConfigApplicationContext(Main.class); 

Ou utilisez le plug-in ci-dessous pour empaqueter comme un simple pot

   org.springframework.boot spring-boot-maven-plugin    repackage     

vous pouvez spécifier les configs externes en utilisant la commande ci-dessous pour exécuter

 java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties 

/ http://docs.spring.io/spring-boot/docs/current/reference/htmlboot-features-external-config.html#boot-features-external-config-application-property-files

Notez que si vous transmettez les propriétés sous forme d’arguments, n’incluez pas @PropertySource("classpath:test.properties") il remplacera les parameters.

Si vous l’exécutez avec succès en utilisant la ligne de commande gradle bootRun , tout en l’empaquetant avec la ligne de commande gradle jar au fichier jar afin de l’exécuter avec la ligne de commande java -jar build/libs/demo.jar , malheureusement Exception: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean . Dans ce cas, vous devez utiliser la tâche bootRepackage de la commande spring-boot plug spring-boot in gradle pour générer un fichier jar exécutable spécial.

  • configuration 1

    $ gradle clean bootRepackage

  • configuration 2

    $ java -jar build / libs / demo.jar

Une SpringApplication tentera de créer le bon type d’ ApplicationContext en votre nom. Par défaut, AnnotationConfigApplicationContext ou AnnotationConfigEmbeddedWebApplicationContext sera utilisé, selon que vous développez ou non une application Web.

L’algorithme utilisé pour déterminer un «environnement Web» est assez simpliste (basé sur la présence de quelques classes). Vous pouvez utiliser setWebEnvironment(boolean webEnvironment) si vous devez remplacer la valeur par défaut.

Il est également possible de prendre le contrôle complet du type ApplicationContext qui sera utilisé en appelant setApplicationContextClass(…​) .

[Astuce] Il est souvent souhaitable d’appeler setWebEnvironment(false) lors de l’utilisation de SpringApplication dans un test JUnit.

L’ajout de la dépendance de démarrage de démarrage par ressort a corrigé mon erreur.

  org.springframework.boot spring-boot-starter-web  

Cela est nécessaire si vous souhaitez démarrer le tomcat en tant que serveur intégré.

vérifiez que votre fichier pom.xml existe

   org.springframework.boot spring-boot-starter-tomcat  

J’ai eu un problème comme celui-ci lack Faute de cette dépendance

Dans mon cas, nous avons ajouté l’annotation @Profile afin d’ignorer la classe TestApplication en mode production et la classe Application en mode test.

Malheureusement, nous avons oublié d’append la ligne suivante dans les fichiers application.properties:

 spring.profiles.active=test or spring.profiles.active=production 

Sans ces config, aucun profil n’a été chargé, ce qui a causé une erreur de ressort peu importante.

Cela devrait être dû à un problème de dépendance, en général, vous devez vérifier la dépendance.

Le problème c’est dans cette classe:

 @ComponentScan @EnableAutoConfiguration public class Application { public static void main(Ssortingng[] args) { //SpringApplication.run(Application.class, args); SpringApplication.run(ScheduledTasks.class, args); } } 

La manière correcte de lancer votre application est la suivante:

 @SpringBootApplication @EnableScheduling public class Application { public static void main(Ssortingng[] args) { SpringApplication.run(Application.class, args); } } 

Un référentiel clair est une solution possible.

Windows -> supprimer tous les sous-dossiers du repository maven:

C: \ Users \ YourUserName.m2 \ repository

Le problème est l’exclusion de tomcat de démarrage, j’ai essayé de l’exclure et d’utiliser vert.x, alors quand j’intègre avec Spring Admin, a commencé des problèmes

  org.springframework.boot spring-boot-starter-web   org.springframework.boot spring-boot-starter-tomcat    

J’ai eu cette exception dans la situation suivante.

dans mon POM étaient des propriétés:

  1.8  com.scmaer.java.microservice.Application 3.1.5 2.0.10 1.4.7.RELEASE 1.5.8.RELEASE UTF-8 false  

et le nom et le chemin d’access de ma classe d’application (“start-class”) étaient incorrects.

J’ai coincé avec le même problème. Comme je n’ai pas défini Main.class et les annotations suivantes dans Spring-Boot en utilisant Maven:

 @SpringBootApplication public class Main { public static void main(Ssortingng args[]){ SpringApplication.run(Main.class, args); } } 

J’ai eu un problème similaire et le problème était un fichier jar de repo cassé maven. Dans mon cas, le fichier jar tomcat-embed-core était cassé. Je l’ai donc retiré du repo maven et l’ai rafraîchi pour le télécharger à nouveau.

Dans mon cas, cela se produit après avoir exclu le dossier de ressources du pom utilisant le code suivant.

   src/main/resources true  */*.properties    

Commentant ce code a commencé mon code.