我的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);
}
}
答案 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>