web-dev-qa-db-fra.com

Spring Boot - Impossible de démarrer le conteneur incorporé

Ma classe SpringBootLoginController renvoie cette erreur (impossible de démarrer le conteneur incorporé), comme indiqué ci-dessous lorsque j'ai lancé l'application springboot. Il s'agit d'un exemple d'application d'amorçage printanier kind kind world.

   .   ____          _            __ _ _
     /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
    ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
     \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
     :: Spring Boot ::        (v1.5.2.RELEASE)

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:137) ~[spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.Java:536) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.Java:122) ~[spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.Java:737) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.Java:370) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.Java:314) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.Java:1162) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.Java:1151) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]

Mon pom.xml

<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.test.springboot</groupId>
    <artifactId>HelloSpringBoot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>HelloSpringBoot</name>
    <description>HelloSpringBoot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.RELEASE</version>
    </parent>

    <properties>
        <Java.version>1.8</Java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

Mon contrôleur:

import org.springframework.boot.*;
import org.springframework.web.bind.annotation.*;

@RestController
public class SpringBootLoginController {

    @RequestMapping("/hello")
    String hello() {
        return "Hello World!!!";
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(SpringBootLoginController.class, args);
    }

}
3
VNT

En annotant avec @SpringBootApplication, vous résolvez ce problème.

@SpringBootApplication
@RestController
public class SpringBootLoginController {

    @RequestMapping("/hello")
    String hello() {
        return "Hello World!!!";
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(SpringBootLoginController.class, args);
    }
}

Vous pouvez également ajouter @EnableAutoConfiguration pour résoudre ce problème.

@EnableAutoConfiguration
@RestController
public class SpringBootLoginController {

    @RequestMapping("/hello")
    String hello() {
        return "Hello World!!!";
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(SpringBootLoginController.class, args);
    }
}
6
VNT

Essayez d’annoter votre classe SpringBootLoginController avec une annotation @SpringBootApplication.

@SpringBootApplication
@RestController
public class SpringBootLoginController {

    @RequestMapping("/hello")
    String hello() {
        return "Hello World!!!";
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(SpringBootLoginController.class, args);
    }
}
6
Abdullah Khan

Pour mon cas, je développais un projet de ligne de commande avec springboot. 

@SpringBootApplication
public class Application implements CommandLineRunner {
//my code here
}

J'utilisais donc simplement le démarreur simple.

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

Mais j'ai aussi eu cette erreur, et il n'y avait pas de dépendance liée au Web dans mon pom qui était vraiment câblée.

Et enfin, j'ai découvert qu'un de mes projets de dépendance utilisait le "javax.servlet.Servlet" dans son propre pom.

Si vous vérifiez le code source du springboot, il vérifiera s'il y a du "javax.servlet.Servlet" dans votre projet lors du démarrage de l'application. Et essayez de démarrer un "conteneur incorporé" Web lorsqu'il existe un "javax.servlet.Servlet".

C'est pourquoi j'ai eu cette erreur parce que j'utilisais le "démarreur à ressort" et qu'il n'y avait aucun conteneur Web à l'intérieur.

Donc, la solution est très simple, dites simplement à springboot qu'il ne s'agit pas d'un projet Web dans le fichier "application.properties":

spring.main.web-environment=false
4
tom

dans mon cas, en ajoutant

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
</dependency>

problème résolu

0
THM

Si vous utilisez maven, construisez par 

mvn package

au lieu de IDE construire un fichier jar.

Il y a beaucoup de problèmes avec le jar construit IDE dans mon cas.

0
NeoSoNg

Vous devriez annoter votre classe SpringBootLoginController. Lisez à propos de l'annotation @SpringBootApplication.

@SpringBootApplication
@RestController
public class SpringBootLoginController {

    @RequestMapping("/hello")
    String hello() {
        return "Hello World!!!";
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(SpringBootLoginController.class, args);
    }
}
0
devOps