Spring引导 - 由于缺少EmbeddedServletContainerFactory bean而无法启动EmbeddedWebApplicationContext [英] Spring boot -- Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean

查看:294
本文介绍了Spring引导 - 由于缺少EmbeddedServletContainerFactory bean而无法启动EmbeddedWebApplicationContext的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我试图在intelliJ中运行我的Spring Boot应用程序,但得到一个错误:

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

2016-01-26 23:09:30.883 INFO 3960 --- [main] com.example.he.ExampleApplication:Starting ExampleApplication on user与PID 3960(F:\ WORK \ Work_Project\Example_Application-master\Example_Application-master\build\classes\main)由用户在F:\\\\\\\\\\\\\\\\\\\\\\ Example_Application-master)
2016-01-26 23:09:30.892信息3960 --- [main] com.example.he.ExampleApplication:没有活动配置集,回退到默认配置文件:default
2016年1月26日23:09:31.042 INFO 3960 --- [主要] ationConfigEmbeddedWebApplicationContext:刷新org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@73d4cc9e:启动日期[星期二年01月26 23点09分31秒IST 2016];上下文结构
的根2016年1月26日23:09:31.242 WARN 3960 --- [主] ationConfigEmbeddedWebApplicationContext:异常情况下初始化过程中遇到 - 取消刷新尝试:org.springframework.context.ApplicationContextException:无法启动嵌入式容器;嵌套异常是org.springframework.context.ApplicationContextException:由于缺少EmbeddedServletContainerFactory bean,无法启动EmbeddedWebApplicationContext。
2016-01-26 23:09:31.453错误3960 --- [main] osboot.SpringApplication:应用程序启动失败

org.springframework.context.ApplicationContextException:无法启动嵌入容器;嵌套异常是org.springframework.context.ApplicationContextException:由于缺少EmbeddedServletContainerFactory bean,无法启动EmbeddedWebApplicationContext。在org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133)
〜[弹簧引导1.3.1.RELEASE.jar:1.3.1.RELEASE]
。在org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532)〜[弹簧上下文4.2.4.RELEASE.jar:4.2.4.RELEASE]
。在org.springframework.boot.context .embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)〜[弹簧引导1.3.1.RELEASE.jar:1.3.1.RELEASE]在org.springframework.boot.SpringApplication.refresh
(SpringApplication。 java:764)[spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
在org.springframework.boot.SpringApplication.doRun(SpringApplication.java:357)[spring-boot-1.3 .1.RELEASE.jar:1.3.1.RELEASE]
在org.springframework.boot.SpringApplication.run(SpringApplication.java:305)[spring-boot-1.3.1.RELEASE.jar:1.3.1 .RELEASE]
在org.springframework.boot.SpringApplication.run(Spring Application.java:1124)[spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1113)[spring-boot -1.3.1.RELEASE.jar:1.3.1.RELEASE]
at com.example.he.ExampleApplication.main(ExampleApplication.java:15)[main /:na]
at sun.reflect .NativeMethodAccessorImpl.invoke0(本机方法)〜[NA:1.8.0_25]在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
〜[NA:1.8.0_25]在太阳
。 reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)〜[NA:1.8.0_25]
。在java.lang.reflect.Method.invoke(Method.java:483)〜[NA:1.8.0_25] $在com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)b $ b [idea_rt.jar:NA]:org.springframework.context.ApplicationContextException:无法启动EmbeddedWebApplicationContext
。通过致由于缺少EmbeddedServletContainerFactory bean。在org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:185)
〜[弹簧引导1.3.1.RELEASE.jar:1.3.1.RELEASE]
。在org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:158)〜[弹簧引导1.3.1.RELEASE.jar:1.3.1.RELEASE]
。在org.springframework.boot .context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130)〜[spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
...省略13个常见帧

2016-01-26 23:09:31.456信息3960 ---

程序完成退出代码1

Iam使用Gradle.This是我的 build.gradle 文件:

  buildscript {
ext {
springBootVersion ='1.3.1.RELEASE'
}
知识库{
mavenCentral()
}
dependencies {
classpath(org.springframework.boot:spring-boot-gradle-plugin:$ {springBootVersion})
}
}

apply plugin:'java'
apply plugin:'eclipse'
apply plugin:'idea'
apply plugin:'spring-boot'
apply plugin:'war'

war {
baseName ='Example-Application'
version ='0.0.1 -SNAPSHOT'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8

存储库{
mavenCentral()
}

依赖关系{
compile('org.springframework.boot:spring- ('org.springframework.boot:spring-boot-starter-security')
compile('org.springframework.boot:spring-boot-starter-boot-start-data-jpa')
compile
compile('org.apache.tomcat.embed:tomcat-embed-jasper:8.0.30')
compile('javax.servlet:servlet-api:2.5')
编译('javax.servlet:jstl:1.2')
runtime('mysql: mysql-connector-java')
providedRuntime'org.springframework.boot:spring-boot-starter-tomcat'
testCompile('org.springframework.boot:spring-boot-starter-test')



eclipse {
classpath {
containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER')
containers' org.eclipse.jdt.launching.JRE_CONTAINER / org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType / JavaSE-1.8'
}
}

任务包装器(type:Wrapper){
gradleVersion ='2.9'
}

是配置类:

  package com.example.he.config; 

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
公共类MvcConfig扩展WebMvcConfigurerAdapter {

@覆盖
公共无效addViewControllers(ViewControllerRegistry注册表){
registry.addViewController( /city\").setViewName(\"city);
registry.addViewController(/)。setViewName(city);
registry.addViewController(/ userAdd)。setViewName(user);
registry.addViewController(/ created)。setViewName(created);
registry.addViewController(/ createblog)。setViewName(blog);
registry.addViewController(/ login)。setViewName(login);
registry.addViewController(/ home)。setViewName(home);

}

}

这是我的应用程序类:

  package com.example.he; 

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
公共类ExampleApplication延伸SpringBootServletInitializer {

公共静态无效的主要(字串[] args)抛出异常{
SpringApplication.run(ExampleApplication .class,args);



@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application){
return application.sources(ExampleApplication.class);
}


}

还有我

  @ComponentScan 
@EnableAutoConfiguration
@Configuration

我对春天很陌生,并且我不太了解这些注释的作用。我尝试了其中的一些方法, t解决了这个问题。







我尝试使用控制台(gradle build)构建应用程序,构建成功但运行战争会给我一个错误:无法启动嵌入式Tomcat 。有人可以帮我吗?

解决方案

我能够启动并运行您的应用程序。我让它运行的唯一改变是在你的build.gradle文件中注释掉你的一些依赖项。

在下面的依赖关系块中,有3行被注释掉。我注释到的spring-boot-start-jpa行只是因为我没有配置的dataSource。



但是,如果您只注释掉servlet-api和jstl

 依赖关系{
// compile('org .bringframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.boot:spring-boot-starter-security')
compile('org.springframework.boot :spring-boot-starter-web')
compile('org.apache.tomcat.embed:tomcat-embed-jasper:8.0.30')
//compile('javax.servlet:servlet ('mysql:mysql-connector-java')
providedRuntime'org.springframework。
//compile('javax.servlet:jstl:1.2')
runtime boot:spring-boot-starter-tomcat'
testCompile('org.springframework.boot:spring-boot-starter-test')
}
pre>

Spring Boot

I was trying to running my spring Boot application in intelliJ but getting an Error:

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

2016-01-26 23:09:30.883  INFO 3960 --- [           main] com.example.he.ExampleApplication         : Starting ExampleApplication on user with PID 3960 (F:\WORK\Work_Project\Example_Application-master\Example_Application-master\build\classes\main started by user in F:\WORK\Work_Project\Example_Application-master\Example_Application-master)
2016-01-26 23:09:30.892  INFO 3960 --- [           main] com.example.he.ExampleApplication         : No active profile set, falling back to default profiles: default
2016-01-26 23:09:31.042  INFO 3960 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@73d4cc9e: startup date [Tue Jan 26 23:09:31 IST 2016]; root of context hierarchy
2016-01-26 23:09:31.242  WARN 3960 --- [           main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: 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.
2016-01-26 23:09:31.453 ERROR 3960 --- [           main] o.s.boot.SpringApplication               : Application startup failed

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.1.RELEASE.jar:1.3.1.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532) ~[spring-context-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) ~[spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:764) [spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
    at org.springframework.boot.SpringApplication.doRun(SpringApplication.java:357) [spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:305) [spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1124) [spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1113) [spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
    at com.example.he.ExampleApplication.main(ExampleApplication.java:15) [main/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_25]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_25]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_25]
    at java.lang.reflect.Method.invoke(Method.java:483) ~[na:1.8.0_25]
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134) [idea_rt.jar: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.1.RELEASE.jar:1.3.1.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:158) ~[spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130) ~[spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE]
    ... 13 common frames omitted

2016-01-26 23:09:31.456  INFO 3960 --- 

Process finished with exit code 1

Iam using Gradle.This is my build.gradle file:

buildscript {
    ext {
        springBootVersion = '1.3.1.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") 
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'
apply plugin: 'war'

war {
    baseName = 'Example-Application'
    version = '0.0.1-SNAPSHOT'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile('org.springframework.boot:spring-boot-starter-data-jpa')
    compile('org.springframework.boot:spring-boot-starter-security')
    compile('org.springframework.boot:spring-boot-starter-web')
    compile('org.apache.tomcat.embed:tomcat-embed-jasper:8.0.30')
        compile('javax.servlet:servlet-api:2.5')
    compile('javax.servlet:jstl:1.2')
    runtime('mysql:mysql-connector-java')
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
    testCompile('org.springframework.boot:spring-boot-starter-test')
}


eclipse {
    classpath {
         containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER')
         containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8'
    }
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.9'
}

This is the configuration class:

package com.example.he.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter {

  @Override
  public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/city").setViewName("city");
    registry.addViewController("/").setViewName("city");
    registry.addViewController("/userAdd").setViewName("user");
    registry.addViewController("/created").setViewName("created");
    registry.addViewController("/createblog").setViewName("blog");
    registry.addViewController("/login").setViewName("login");
    registry.addViewController("/home").setViewName("home");

  }

}

And this is my Application class:

package com.example.he;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
public class ExampleApplication extends SpringBootServletInitializer{

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


  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(ExampleApplication.class);
  }


}

and also i have tried these annotations as well.

@ComponentScan
@EnableAutoConfiguration
@Configuration

I am new to spring and i don't really understand what these annotations do.I tried following some of these but couldn't fix the issue.

Spring Boot: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean

Spring Boot Testing: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean

I tried building the application using console(gradle build), build is successful but running the war gives me an error: Unable to start embedded Tomcat . Could someone please help me ?

解决方案

I was able to get your application up and running. The only change I made to get it running was to comment out a couple of your dependencies in your build.gradle file.

In the dependencies block below, 3 lines are commented out. The spring-boot-start-jpa line I commented out only because I did not have a configured dataSource.

However, if you only comment out the servlet-api and jstl dependencies, your app should start without issue, it did for me.

dependencies {
    //compile('org.springframework.boot:spring-boot-starter-data-jpa')
    compile('org.springframework.boot:spring-boot-starter-security')
    compile('org.springframework.boot:spring-boot-starter-web')
    compile('org.apache.tomcat.embed:tomcat-embed-jasper:8.0.30')
    //compile('javax.servlet:servlet-api:2.5')
    //compile('javax.servlet:jstl:1.2')
    runtime('mysql:mysql-connector-java')
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

这篇关于Spring引导 - 由于缺少EmbeddedServletContainerFactory bean而无法启动EmbeddedWebApplicationContext的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆