是否每个 Spring Boot 应用程序都创建一个能够运行的 tomcat 容器?

Posted

技术标签:

【中文标题】是否每个 Spring Boot 应用程序都创建一个能够运行的 tomcat 容器?【英文标题】:Does every spring boot application create a tomcat container to be able to run? 【发布时间】:2021-11-08 02:45:06 【问题描述】:

例如, 我了解添加特定依赖项,例如包含 tomcat 的 spring-boot-starter-web,因为传递依赖项会触发 Spring 框架初始化 tomcat 容器,但我想知道我们是否说 spring-boot 应用程序正在运行,这是否总是意味着 tomcat 也在运行?

【问题讨论】:

这能回答你的问题吗? Spring Boot without the web server 可能是 Netty;不必总是 Tomcat。 谢谢@Meninx-メネンックス,这有助于我了解如何禁用服务器,但我也想知道当我们运行 spring-boot 应用程序时,tomcat 是否(总是)运行。从下面提供的答案中,我现在明白事实并非如此。 @PolamreddyVivekReddy 没问题! 【参考方案1】:

我想知道如果我们说一个 spring-boot 应用程序正在运行,它是否总是意味着 tomcat 也在运行?

不,它没有。

Spring Boot 可用于 Web 应用程序和非 Web 应用程序。 例如,对于 Web 应用程序,您可以使用 tomcat/jetty/undertow/netty,由您选择最适合您的应用程序。

如果您不想运行嵌入式版本的网络服务器,您可以选择创建一个 WAR 文件并将其放入预先准备好的网络服务器中。

如果您根本不想运行 Web 应用程序(在最广泛的意义上围绕“请求 - 响应”工作方式构建的东西) - 您可以创建一个“CommandLineRunner” - 在这种情况下您不需要不需要依赖 web-mvc 和 webflux。有关命令行运行器的更多信息,请阅读here for example

【讨论】:

【参考方案2】:

您可以在您的 JAR 中拥有一个能够独立运行的嵌入式服务器。默认情况下它是 Tomcat,但您可以将其更改为其他,例如 Jetty。其他详细信息:

https://docs.spring.io/spring-boot/docs/2.0.6.RELEASE/reference/html/howto-embedded-web-servers.html

如果您不想拥有嵌入式服务器并且想要部署应用程序,您还可以创建 WAR 文件而不是 JAR 文件。其他详细信息:

https://www.baeldung.com/spring-boot-no-web-server https://spring.io/guides/gs/convert-jar-to-war/

【讨论】:

以上是关于是否每个 Spring Boot 应用程序都创建一个能够运行的 tomcat 容器?的主要内容,如果未能解决你的问题,请参考以下文章

Docker + Spring Boot + FastDFS 搭建一套分布式文件服务器,太强了

Docker + Spring Boot + FastDFS 搭建一套分布式文件服务器,太强了!

是否可以在spring boot/java中实现每个用户在不同时间动态调度一个任务

nodejs从0到1(mysql)

Spring Boot的每个模块包详解

php 无限参数方法