1、简介 {#1简介}
Spring Boot 是一个出色、流行的框架,可以快速创建适用于各种用例的 Java 应用。其中最常见用法之一是使用嵌入式 Servlet 容器来作为 Web 服务器。
Spring Boot 也可以用于许多不需要 Web 服务器的应用,如:命令行应用、作业调度、批处理或流处理应用等。
本文将带你了解在没有 Web 服务器的情况下使用 Spring Boot 的几种不同方式。
2、依赖 {#2依赖}
防止 Spring Boot 应用启动嵌入式 Web 服务器的最简单方法就是不在依赖中包含 Web Server Starter。
这意味着在 Maven POM 或 Gradle build 文件中都不会包含 spring-boot-starter-web
依赖。相反,使用更基本的 spring-boot-starter
依赖来替代它。
注意,Tomcat 依赖有可能作为传递依赖包含在应用中。在这种情况下,可能需要将 Tomcat 从包含它的依赖中排除。
3、修改 Spring Application {#3修改-spring-application}
另一种禁用 Spring Boot 内嵌 Web 服务器的方法是使用代码。
使用 SpringApplicationBuilder
:
new SpringApplicationBuilder(MainApplication.class)
.web(WebApplicationType.NONE)
.run(args);
或者,可以使用 SpringApplication
:
SpringApplication application = new SpringApplication(MainApplication.class);
application.setWebApplicationType(WebApplicationType.NONE);
application.run(args);
无论哪种方式,都可以在 classpath 上保留可用的 Servlet 和容器 API。这意味着仍然可以在不启动 Web 服务器的情况下使用 Web 服务器库。例如,使用它们来编写测试或在自己的代码中使用它们的 API,这就非常有用。
4、使用 Application Properties {#4使用-application-properties}
使用代码禁用 Web 服务器不够灵活 - 无论在哪里部署应用,它都会对应用产生影响。
如果我们想在特定情况下创建 Web 服务器怎么办?
此时,可以使用 Spring application properties:
spring.main.web-application-type=none
或者 YAML:
spring:
main:
web-application-type: none
这种方法的好处是,可以有条件地启用 Web 服务器。利用 Spring Profile 或 Conditional,可以控制不同部署中的 Web 服务器行为。
例如,可以让 Web 服务器只在开发阶段运行,以暴露指标或其他 Spring 端点,而在生产阶段则出于安全原因将其禁用。
注意,Spring Boot 的某些早期版本使用名为 web-environment
的 boolean
属性来启用和禁用 Web 服务器。随着 Spring Boot 同时采用传统容器和响应式容器,该属性已被重新命名,现在使用的是枚举。
5、总结 {#5总结}
创建 Spring Boot 应用而无需 Web 服务器的原因有很多,本文介绍了实现这一目标的多种方法。每种方法都各有利弊,应该选择最符合需求的方法。
Ref:https://www.baeldung.com/spring-boot-no-web-server