SpringBoot - 无法启动嵌入式容器

时间:2017-04-17 08:20:49

标签: java maven spring-boot

我的SpringBootLoginController类在启动springboot应用程序时抛出此错误(无法启动嵌入式容器),如下所示。这是一个hello world类型的spring boot应用程序示例。

   .   ____          _            __ _ _
     /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
    ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
     \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
     :: 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]

我的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>

我的控制器:

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);
    }

}

10 个答案:

答案 0 :(得分:7)

通过 @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);
    }
}

或者,通过添加 @EnableAutoConfiguration 也可以解决此问题。

@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);
    }
}

答案 1 :(得分:6)

尝试使用SpringBootLoginController注释注释您的@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);
    }
}

答案 2 :(得分:4)

就我而言,我正在使用springboot开发一个命令行项目。

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

所以我只是使用简单的启动器。

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

但是我也遇到了这个错误,并且我的pom中没有与网络相关的依赖关系,这是非常有线的。

最后我发现我的一个依赖项目是使用&#34; javax.servlet.Servlet&#34;在它自己的pom。

如果检查springboot的源代码,它将检查是否有任何&#34; javax.servlet.Servlet&#34;在启动应用程序时在项目中。并尝试启动一个网络&#34;嵌入式容器&#34;当有任何&#34; javax.servlet.Servlet&#34;。

这就是我收到此错误的原因,因为我正在使用&#34; spring-boot-starter&#34;而且里面没有网箱。

所以解决方案非常简单,只需告诉springboot这不是&#34; application.properties&#34;中的Web项目:

spring.main.web-environment=false

答案 3 :(得分:1)

我删除了.m2存储库,将以下版本从1.3.1更改为2.1.3,进行了maven清理,重新构建了项目,并首次运行(使用intellij)

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

答案 4 :(得分:0)

在我的情况下添加

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

解决了问题

答案 5 :(得分:0)

您应该为SpringBootLoginController课程添加注释。阅读@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 :(得分:0)

如果你正在使用maven,那么按

构建
mvn package

而不是IDE构建jar。

在我的情况下,IDE构建的jar有很多问题。

答案 7 :(得分:0)

到目前为止,我还没有弄清楚问题,但是我删除了.m2存储库,提供了安装版本,并且一切都像魅力一样

答案 8 :(得分:0)

org.springframework.boot的版本从1.4.2更改为2.1.3

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

答案 9 :(得分:-4)

您的依赖项存在问题。添加此

<html>
<body>

<div id="app">
<p>When you submit the form, a function is triggered which alerts some text.</p>

    <form id="abc" action="https://www.w3schools.com/action_page.php">
      Enter name: <input type="text" name="fname">
      <input type="submit" value="Submit">
    </form>
</div>

<script
  src="https://code.jquery.com/jquery-2.2.4.min.js"
  integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44="
  crossorigin="anonymous"></script>

  <script type="text/javascript">

    $('form#abc').on('submit', function(event){
        event.preventDefault();
        var formData = $("form#abc").serializeArray();
        console.log(formData);

        $.ajax({
          url: "https://www.w3schools.com/action_page.php",
          type: "POST",
          data: formData,
          dataType: 'jsonp',
          crossDomain: true,
          success:function(json){
            $('#app').html('<h1>Thank You</h1>');   
          },
          error:function(){
            $('#app').html('<h1>Thank You</h1>');   
          }  
        });
    });     
  </script>  
</body>
</html>