【问题标题】:spring boot wants me to start server because I have servlet on classpathspring boot 想让我启动服务器,因为我在类路径上有 servlet
【发布时间】:2018-12-19 01:36:00
【问题描述】:

今天我遇到了以下问题:

不幸的是,我的一个核心依赖项将 servlet.api 拉到了我的类路径中。正因为如此,我的 spring-boot 自动认为我是一个服务器,而我是一个桌面应用程序,并且不想在没有一些需要 web 的工厂的情况下启动。

它是这样说的:

Caused by: org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.

不幸的是,我无法摆脱这种依赖关系,他们修复传递依赖关系可能需要一些时间。

有什么技巧可以绕过这个吗?

谢谢

【问题讨论】:

  • 假设您使用的是 Maven,您不能排除 pom.xml 中的依赖关系吗?如果没有,您必须按照 JB Nizet 发布的 URL 中的说明在您的 SpringApplication 上设置 setWebApplicationType
  • 你可以在这里发布你的 pom.xml 内容吗? @Dreando
  • Brajesh - 我无法在此处发布代码。 Thoomas - 不幸的是,当我排除一些东西时,这个库就不起作用了。 JBNizet - 看来你是对的,谢谢

标签: java spring spring-boot


【解决方案1】:

如果您使用的是 Spring boot 2.x,您可以通过将 spring.main.web-application-type 属性设置为 none 来禁用 Web 应用程序:

spring.main.web-application-type=none

如果您使用的是 Spring boot 1.x,您可以设置 spring.main.web-environment 属性:

spring.main.web-environment=false

这个改变的原因是因为 Spring boot 2.x 现在可以配置为响应式、基于 servlet 或无,而在 Spring boot 1.x 中,它要么基于 servlet,要么无(所以它可能只是一个布尔值)。


或者,您也可以使用 the documentation (以及 cmets 中)提到的自定义 SpringApplication 实例:

public static void main(String[] args) {
    new SpringApplicationBuilder(Application.class)
        .web(WebApplicationType.NONE) // Use this for Spring boot 2.x
        .web(false) // Use this for Spring boot 1.x
        .run(args);
}

并非所有 Spring 应用程序都必须是 Web 应用程序(或 Web 服务)。如果您想在main 方法中执行一些代码,同时还想引导一个 Spring 应用程序来设置要使用的基础设施,您可以使用 Spring Boot 的SpringApplication 特性。 SpringApplication 更改其 ApplicationContext 类,这取决于它是否认为它需要一个 Web 应用程序。您可以做的第一件事就是将与服务器相关的依赖项(例如 servlet API)从类路径中移除。如果您不能这样做(例如,您从同一代码库运行两个应用程序),那么您可以在您的 SpringApplication 实例上显式调用 setWebApplicationType(WebApplicationType.NONE) 或设置 applicationContextClass 属性(通过 Java API 或使用外部属性) .

【讨论】:

    【解决方案2】:

    您缺少一些将其作为 Web 应用程序运行所需的 JAR 文件。请确保您已包含 spring-boot-starter-web.jar 文件。 如果我们使用的是maven,请按如下方式进行。

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

    【讨论】:

    • 他不想启动 Web 服务器。
    猜你喜欢
    • 1970-01-01
    • 2016-07-19
    • 2018-09-29
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 2018-05-06
    相关资源
    最近更新 更多