applicationcontextexception:由于缺少servletwebserverfactory bean,无法启动servletwebserverapplicationcontext

e7arh2l6  于 2021-07-13  发布在  Spark
关注(0)|答案(21)|浏览(407)

我已经使用springboot编写了一个spring批处理应用程序。当我尝试在本地系统上使用命令行和类路径运行该应用程序时,它运行良好。然而,当我试图在linux服务器上运行它时,它给了我以下异常

Unable to start web server; nested exception is
org.springframework.context.ApplicationContextException: 
Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.

下面是我的操作方式:

java -cp jarFileName.jar; lib\* -Dlogging.level.org.springframework=DEBUG -Dspring.profiles.active=dev -Dspring.batch.job.names=abcBatchJob com.aa.bb.StartSpringBatch > somelogs.log
ycl3bljg

ycl3bljg1#

我在intellij idea中右键单击了我的项目,然后maven->重新加载项目,问题解决了。

ryhaxcpt

ryhaxcpt2#

@springbootapplication:已检查,不起作用。
pom文件中的springbootstarter站点:已检查,不工作。
从intellij ce切换到intellij ultimate,问题解决。

k4emjkb1

k4emjkb13#

我在尝试将web应用程序作为胖jar而不是从ide(intellij)中运行时遇到了这个问题。
这就是我的工作。只需将默认配置文件添加到application.properties文件。

spring.profiles.active=default

如果已经设置了其他特定概要文件(dev/test/prod),则不必使用default。但如果您没有这样做,那么将应用程序作为胖jar运行是必要的。

pwuypxnk

pwuypxnk4#

我的问题和原来的问题一样,只是我是通过eclipse运行的,而不是cmd。尝试了所有列出的解决方案,但都不起作用。不过,我的最终解决方案是在通过cmd运行时(或者可以通过eclipse类似地运行)。使用了一个修改后的命令,命令中附加了spring config:

start java -Xms512m -Xmx1024m <and the usual parameters as needed, like PrintGC etc> -Dspring.config.location=<propertiesfiles> -jar <jar>

我想我的问题是Spring配置没有正确加载。

bksxznpy

bksxznpy5#

在我的例子中,我使用了tomcat 8并更新到tomcat 9修复了它:

<modelVersion>4.0.0</modelVersion>
  <groupId>spring-boot-app</groupId>
  <artifactId>spring-boot-app</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.1.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
      <groupId>com.h2database</groupId>
      <artifactId>h2</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
          <execution>
            <goals>
              <goal>java</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <mainClass>com.example.Application</mainClass>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <properties>
    <tomcat.version>9.0.37</tomcat.version>
  </properties>

相关问题:
https://github.com/spring-projects/spring-boot/issues?q=missing+servletwebserverfactory+bean
https://github.com/spring-projects/spring-boot/issues/22013 -spring boot应用程序作为一个模块
https://github.com/spring-projects/spring-boot/issues/19141 -当SpringBootStarterWeb作为依赖项包含时,当主类扩展用@springbootapplication注解的基类时,应用程序无法加载

tzxcd3kk

tzxcd3kk6#

我试图用springboot创建一个web应用程序,但我得到了相同的错误。检查之后,我发现我缺少一个依赖项。所以,一定要在pom.xml文件中添加以下依赖项。

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

hgb9j2n67#

至于我,我去掉了 provided tomcat依赖中的作用域。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-tomcat</artifactId>
  <scope>provided</scope> // remove this scope
</dependency>
pieyvz9o

pieyvz9o8#

升级 spring-boot-starter-parentpom.xml 最新的版本为我修复了它。

unhi4e5o

unhi4e5o9#

如果您使用的是intellij,并且这种情况发生在您身上(就像我的noob一样),请确保run设置有spring引导应用程序,而不是普通应用程序。

emeijp43

emeijp4310#

除了其他答案中可能的解决方案之外,您的机器上也可能发生了maven依赖性损坏。我在尝试运行我的(web)spring启动应用程序时遇到了相同的错误,通过运行以下命令解决了这个问题-

mvn dependency:purge-local-repository -DreResolve=true

然后

mvn package

我开始研究这个解决方案的另一个问题,eclipse不允许我从ide运行主应用程序类,原因是另一个错误,类似于这个线程上的错误->类型org.springframework.context.configurableapplicationcontext无法解析。它是从必需的.class文件间接引用的

new9mtju

new9mtju11#

在我的例子中,问题是我的eclipse中没有单独安装tomcat服务器。我假设我的springboot会自动启动服务器。
因为我的主课 SpringBootServletInitializer 和覆盖 configure 方法,我肯定需要在ide中安装tomcat服务器。
要安装,首先下载apachcetomcat(在我的例子中是版本9)并使用servers选项卡创建服务器。
安装后,在服务器上运行主类。

Run As -> Run on Server
0yycz8jy

0yycz8jy12#

案例1: @SpringBootApplication SpringBootStarter类中缺少注解。

案例2:

对于非web应用程序,请在属性文件中禁用web应用程序类型:

application.properties :

spring.main.web-application-type=none

如果你使用 application.yml 然后添加:

spring:
    main:
      web-application-type: none

对于web应用程序,在main类中扩展springbootservletinitializer

@SpringBootApplication
public class YourAppliationName extends SpringBootServletInitializer{
    public static void main(String[] args) {
        SpringApplication.run(YourAppliationName.class, args);
    }
}

案例3:

如果你使用 spring-boot-starter-webflux 然后再加上 spring-boot-starter-web 作为依赖关系。

b4lqfgs4

b4lqfgs413#

类似于确保 org.springframework.boot:spring-boot-starter-tomcat 安装了,我失踪了 org.eclipse.jetty:jetty-server 从我的
build.gradle org.springframework.boot:spring-boot-starter-web 需要一个服务器,不管是tomcat、jetty还是其他什么——它可以编译,但没有它就不能运行。

piztneat

piztneat14#

我在迁移到spring boot时遇到了这个问题。我找到了一个删除依赖项的建议,它很有帮助。所以,我删除了jspapi项目的依赖关系。此外,还必须删除servlet api依赖关系。

compileOnly group: 'javax.servlet.jsp', name: 'jsp-api', version: '2.2'
mo49yndu

mo49yndu15#

添加以下bean对我有效。

@Bean
    public ServletWebServerFactory servletWebServerFactory() {
        return new TomcatServletWebServerFactory();
    }

我使用 SpringApplication.run(MyApplication.class, args); 没有 @SpringBootApplication 注解。

相关问题