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

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

我已经使用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
0yycz8jy

0yycz8jy1#

案例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 作为依赖关系。

rlcwz9us

rlcwz9us2#

可能你失踪了 @SpringBootApplication 在你的 Spring 启动课上。

@SpringBootApplication
public class LoginSecurityAppApplication {

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

}
bz4sfanl

bz4sfanl3#

解决方案是:
我将下面的属性显式设置为 noneapplication.yml 文件。

spring:
  main:
    web-application-type: none
jmp7cifd

jmp7cifd4#

我的解决方案与严重的依赖性有关。我有:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <exclusions>
    <exclusion>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
    </exclusion>
  </exclusions>
</dependency>

在我的pom中,我不得不对排除项进行注解以使其生效。出于某种原因,它必须寻找这个tomcat包。

dfty9e19

dfty9e195#

您可能会在项目中使用此选项:

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

在这种情况下,您还必须添加:

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

神奇的事情发生了:)
ps:这是因为spring在默认情况下使用WebMVC,而不是WebFlux

efzxgjgh

efzxgjgh6#

在我的例子中,这个问题是在评论springbootstarteweb中排除tomcat依赖项时解决的

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <!-- <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions> -->
    </dependency>
vjrehmav

vjrehmav7#

注解类 public static void main 例如: @SpringBootApplication

mo49yndu

mo49yndu8#

添加以下bean对我有效。

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

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

piztneat

piztneat9#

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

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

b4lqfgs410#

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

ycl3bljg

ycl3bljg11#

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

new9mtju

new9mtju12#

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

Run As -> Run on Server
emeijp43

emeijp4313#

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

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

然后

mvn package

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

unhi4e5o

unhi4e5o14#

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

pieyvz9o

pieyvz9o15#

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

相关问题