Spring Boot 应用程序错误
Posted
技术标签:
【中文标题】Spring Boot 应用程序错误【英文标题】:Spring Boot Application Error 【发布时间】:2017-05-10 18:29:52 【问题描述】:我正在使用 Spring Boot 做我的第一个项目。我收到以下我不知道的错误。我是否缺少下面显示的 build.gradle 中的任何依赖项?运行 Application.java 文件时出现错误。
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:133) ~[spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) ~[spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1191) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1180) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
at com.bale.route.Application.main(Application.java:12) [classes/:na]
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:185) ~[spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:158) ~[spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130) ~[spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
... 8 common frames omitted
以下是我的配置文件。
**//Application.java**
package com.test.route;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
@SpringBootApplication
public class Application extends SpringBootServletInitializer
public static void main(String[] args)
SpringApplication.run(Application.class, args);
protected SpringApplicationBuilder configure(
SpringApplicationBuilder application)
return application.sources
(Application.class);
//build.gradle
buildscript
repositories
mavenCentral()
dependencies
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.3.RELEASE")
apply plugin: 'war'
apply plugin: 'java'
apply plugin: 'spring-boot'
repositories
mavenCentral()
sourceCompatibility = 1.7
targetCompatibility = 1.7
dependencies
compile("org.springframework.boot:spring-boot-starter-web")
exclude module: 'spring-boot-starter-tomcat'
// tag::actuator[]
//compile("org.springframework.boot:spring-boot-starter-actuator")
compile("org.apache.tomcat.embed:tomcat-embed-core")
// end::actuator[]
// tag::tests[]
//testCompile("org.springframework.boot:spring-boot-starter-test")
// end::tests[]
task wrapper(type: Wrapper)
gradleVersion = '2.3'
//application.properties
server.servlet-path= /app
logging.level.org.springframework=DEBUG
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
cookie.path=
cookie.domain=
我的配置中缺少什么?
【问题讨论】:
您不应排除spring-boot-starter-tomcat
。删除 tomcat-embed-core
的排除和显式声明。
【参考方案1】:
我明白了,您出于某种原因从spring-boot-starter-web
中排除了spring-boot-starter-tomcat
,并添加了org.apache.tomcat.embed:tomcat-embed-core
作为依赖项。
根据例外情况,您没有 bean EmbeddedServletContainerFactory
。在我看来,这个 bean(确切的 TomcatEmbeddedServletContainerFactory
)是在 spring-boot-starter-tomcat
依赖项中的某些配置中创建的。所以看起来,你必须离开spring-boot-starter-tomcat
,否则你将不得不自己创建这个bean。
【讨论】:
感谢您的回复,斯坦尼斯拉夫。但即使我注释掉排除项,我仍然会遇到同样的错误。 您能告诉我,您是如何运行它的吗?作为独立的 jar 还是作为可部署的战争? 我将它作为一个独立的 jar 运行。我将 Application.java 文件(如上所示)作为 java 应用程序运行。 在这种情况下,您不需要扩展SpringBootServletInitializer
。只有可部署的战争创建才需要它
你的意思是说如果我将它作为可部署的战争运行,应用程序将可以正常工作。以上是关于Spring Boot 应用程序错误的主要内容,如果未能解决你的问题,请参考以下文章
将 spring-boot-starter-security 添加到 Spring Boot 应用程序会导致错误 'entityManagerFactory' 或 'persistenceUnitNa