springboot 项目部署是tomcat么

news/2025/10/11 11:28:06/文章来源:https://www.cnblogs.com/hanease/p/19134625

------------------------------------------------------

Spring Boot 项目的部署可以使用 Tomcat,但并非只能用 Tomcat。具体取决于项目的配置和需求,主要分为两种情况:** 内置服务器部署 (默认)和外部服务器部署 **。

一、默认:内置 Tomcat 部署(最常用)

Spring Boot 的 spring-boot-starter-web 依赖默认集成了 ** 嵌入式 Tomcat **(作为默认的 Servlet 容器),因此:
  • 项目可以直接打成 JAR 包,通过 java -jar 项目名.jar 命令启动,无需额外安装 Tomcat 服务器。
  • 内置 Tomcat 会自动启动并处理 HTTP 请求,这是 Spring Boot 最便捷的部署方式(尤其适合开发、测试和小型应用)。
依赖示例(默认包含 Tomcat):
xml
 
 
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 默认包含 spring-boot-starter-tomcat -->
</dependency>
 

二、可选:切换其他内置服务器

Spring Boot 支持替换内置服务器(如 Jetty、Undertow),只需排除 Tomcat 依赖并引入目标服务器依赖即可。

示例:替换为 Jetty

xml
 
 
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 排除默认的 Tomcat 依赖 --><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions>
</dependency><!-- 引入 Jetty 依赖 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
 

示例:替换为 Undertow(性能更优,适合高并发)

xml
 
 
<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><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
 

三、传统方式:部署到外部 Tomcat

如果需要将 Spring Boot 项目部署到外部独立的 Tomcat 服务器(如企业统一管理的 Tomcat 集群),需进行如下配置:
  1. 修改打包方式为 WAR在 pom.xml 中设置:
    xml
     
     
    <packaging>war</packaging>
    
     
     
  2. 排除内置 Tomcat 的依赖(避免冲突)
    xml
     
     
    <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><!-- 保留 Tomcat API 依赖(编译时需要,运行时由外部 Tomcat 提供) -->
    <dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-core</artifactId><scope>provided</scope>
    </dependency>
    
     
     
  3. 配置启动类继承 SpringBootServletInitializer使外部 Tomcat 能识别 Spring Boot 应用:
    java
     
    运行
     
     
     
     
    @SpringBootApplication
    public class MyApplication extends SpringBootServletInitializer {@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder application) {return application.sources(MyApplication.class);}public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
    }
    
     
     
  4. 打包部署执行 mvn clean package 生成 WAR 包,放入外部 Tomcat 的 webapps 目录下,启动 Tomcat 即可。

总结

  • Spring Boot 项目默认使用内置 Tomcat,通过 JAR 包直接部署(最简便)。
  • 可替换为 Jetty、Undertow 等其他内置服务器,适应不同性能需求。
  • 也支持部署到外部 Tomcat(需修改打包方式和依赖配置),适合传统企业级部署场景。
因此,“部署是否用 Tomcat” 取决于具体配置,Tomcat 是默认选择,但不是唯一选择。

------------------------------------------------------

在 Spring Boot 中,Tomcat、Jetty、Undertow 是最常用的三种嵌入式 Servlet 容器,均支持 Servlet 规范,但在性能、资源占用、功能特性等方面存在差异。选择时需结合项目场景(如并发量、资源限制、功能需求等),以下是详细对比:

一、基本背景

容器所属组织特点概述
Tomcat Apache 最主流的 Servlet 容器,历史悠久、生态完善、兼容性强,默认集成在 Spring Boot
Jetty Eclipse 轻量级、灵活,适合嵌入式场景,可按需扩展组件
Undertow Red Hat 基于 NIO 异步 IO 模型,高并发性能优异,内存占用低

二、核心维度对比

1. 性能与并发

  • Tomcat:基于 BIO(阻塞 IO)和 NIO 混合模型(默认 NIO),处理中等并发场景稳定,但在极高并发(如 10w+ TPS) 下性能可能下降,资源消耗(CPU / 内存)略高。优势在于优化成熟,对传统同步请求(如表单提交)处理高效。
  • Jetty:基于 NIO 模型,设计更轻量,短连接场景(如 REST API)性能优于 Tomcat,但长连接场景(如 WebSocket)表现一般。并发处理能力中等,适合中小规模应用。
  • Undertow:基于 NIO 异步非阻塞模型,支持IO 多路复用,并提供异步 Servlet(Jakarta Servlet 3.1+)和 WebSocket 原生支持,高并发场景下性能最优(尤其高吞吐量 API 服务)。相同硬件资源下,能处理更多并发连接,响应延迟更低。

2. 资源占用

  • 内存占用:Undertow < Jetty < Tomcat(同等配置下,Undertow 内存占用约比 Tomcat 低 10%-20%)。
  • 启动速度:Jetty < Undertow < Tomcat(Jetty 组件按需加载,启动最快;Tomcat 因功能全,启动略慢)。

3. 功能与扩展性

  • Tomcat:功能最全,支持所有 Servlet 规范(最新支持 Servlet 6.0)、JSP、WebSocket 等,内置丰富的安全特性(如 CSRF 防护、角色认证),生态插件多(如 APR 原生库加速)。扩展性中等,配置相对固定(如需深度定制需修改源码或复杂配置)。
  • Jetty:模块化设计,可按需裁剪组件(如仅保留 HTTP 服务器功能),扩展性极强,适合嵌入式场景(如嵌入到 IDE、物联网设备)。对 JSP 支持较弱(需额外配置),更适合纯 API 服务。
  • Undertow:支持 Servlet 6.0、WebSocket、HTTP/2,提供灵活的处理器链(Handler Chain)机制,可通过代码动态配置请求处理流程(无需 XML),扩展性优于 Tomcat。不支持 JSP(需配合 JSP 引擎,不推荐),专注于高性能 HTTP 服务。

4. 兼容性与生态

  • Tomcat:兼容性最佳,几乎所有 Java Web 框架(Spring、Struts 等)和第三方组件(如 Shiro、Security)都优先适配 Tomcat,遇到问题时解决方案最多。
  • Jetty:兼容性良好,但部分老旧组件(如依赖特定 Tomcat 类的库)可能存在适配问题,社区活跃度低于 Tomcat。
  • Undertow:兼容性较好(支持主流框架),但生态不如 Tomcat 完善,部分特殊场景(如复杂 JSP 页面)需额外处理。

5. 适用场景

容器最佳场景不推荐场景
Tomcat 传统 Web 应用(含 JSP)、中小规模 API 服务、团队熟悉度高的场景 超高性能要求的高并发 API 服务
Jetty 嵌入式应用(如 IDE 插件、物联网设备)、轻量 API 服务、资源受限的环境 复杂 JSP 应用、高并发长连接场景
Undertow 高并发 API 服务(如微服务网关)、WebSocket 实时通信(如聊天、消息推送) 依赖 JSP 的传统 Web 应用、团队对其不熟悉的场景

三、Spring Boot 中切换容器的配置

Spring Boot 默认使用 Tomcat,切换为 Jetty 或 Undertow 只需修改 pom.xml 依赖:

1. 切换为 Jetty

xml
 
 
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 排除默认 Tomcat --><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions>
</dependency>
<!-- 引入 Jetty -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
 

2. 切换为 Undertow

xml
 
 
<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>
<!-- 引入 Undertow -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
 

总结

  • 追求稳定性和兼容性:选 Tomcat(适合大多数常规项目)。
  • 追求轻量和嵌入式场景:选 Jetty(适合资源受限或定制化需求高的场景)。
  • 追求高并发和高性能:选 Undertow(适合微服务、API 网关等高频请求场景)。
实际项目中,建议先通过压测(如 Jmeter、Gatling)验证不同容器在目标场景下的表现,再结合团队熟悉度做选择。

------------------------------------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/934682.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 年最新推荐恒温恒湿试验箱优质厂家榜单:涵盖立式/可程式/小型等多类型设备的精选企业推荐可程式/小型/防爆高低温试/高温高湿试验箱/低温低湿试验箱厂家推荐

在工业生产与科研检测中,恒温恒湿试验箱是保障产品性能稳定性的关键设备,其质量与性能直接影响检测数据的准确性和生产科研进度。当前市场上该类设备品牌众多,部分小厂商以次充好,采用劣质零部件导致设备运行不稳定…

CSS开发工具推荐与实战经验,让样式开发更高效、更精准

本文介绍 CSS 开发工具,包括 VS Code、WebStorm、Sass、PostCSS、Chrome DevTools、Firefox Tools、WebDebugX、PurgeCSS、Lighthouse 等,结合实际案例总结从样式编写到跨端调试的完整工具链与最佳实践。写 CSS 的人…

详细揭秘:详细揭秘:集合划分容斥的容斥系数

宝宝都会的集合划分容斥,从多项式角度推导容斥系数详细揭秘:详细揭秘:集合划分容斥的容斥系数 宝宝都会的集合划分容斥,从多项式角度推导容斥系数 参考文献: 详细揭秘:集合划分容斥的容斥系数 2024.12.23 闲话 浅…

2025 年冷热冲击试验箱生产厂家最新推荐榜:聚焦三箱 / 两箱 / 吊篮式 / 小型 / 风冷式 / 可程式设备,精选优质企业助力高效选购

在工业制造与科研检测领域快速发展的当下,冷热冲击试验箱作为评估产品耐温变性能的核心设备,市场需求日益增长,但行业内厂家数量繁杂、实力悬殊。部分厂家存在技术储备薄弱、工艺精度不足、售后服务滞后等问题,导致…

学好微积分特别是偏微分方程的数值求解对于学习CFD的好处?

学好微积分特别是偏微分方程的数值求解对于学习CFD的好处?当然!这是一个极其重要的问题。可以说,微积分(尤其是偏微分方程数值求解)是CFD的灵魂和基石。学好它们对于学习CFD的好处是全方位的、根本性的,而不仅仅…

基于Logistic映射与Chen超混沌系统结合DNA分块编解码的图像加密技术

一、核心代码matlab 1. 混沌系统初始化 % Logistic映射参数 r = 3.9999999999; % 密钥敏感参数 x0 = 0.547524589; % 初始值% Chen超混沌系统参数 a = 35; b = 28; c = 2.9; d = 0.1;% 生成混沌序列 def logistic_seq(…

批量文件重命名工具(带撤销功能)

最近公司同事需要批量处理文件名的需求:前缀,后缀,替换,于是就有了下面的代码:import os import glob import tkinter as tk from tkinter import ttk, filedialog, messagebox, scrolledtext from datetime impo…

Trae与Gitee MCP强强联合:AI编程生态迎来重大升级

Trae与Gitee MCP强强联合:AI编程生态迎来重大升级 国内AI编程领域迎来重要里程碑。字节跳动旗下明星产品Trae AI IDE宣布与Gitee MCP实现深度集成,这一战略合作将为开发者带来前所未有的智能编码体验。作为国内首款支…

Web前端入门第 88 问:引入 JavaScript 的 script 标签究竟有多少用法?

HTML 版本不停的更新迭代,也导致浏览器支持的写法眼花缭乱,就拿 script 标签来说,刚刚入行的那会儿就只知道用来写内联的 js 代码,后来又学到了引入 js 文件,ES 模块规范化之后又知道能用来引入模块化的 js 代码,…

我如何控制新增的节点是 leader 还是follower呢?

目录背景和价值一、新增节点时的关键配置二、通过分区重分配让新增节点成为更多 Leader1. 为现有主题新增分区,并优先分配到新增节点2. 重新分配原有分区的副本,让新节点成为 Leader三、确保新节点稳定成为 Leader 的…

Nuxt3项目Warn:Browserslist: browsers data (caniuse-lite) is 6 months old.

Nuxt3+Vue3项目中,执行yarn dev时警告:Browserslist: browsers data (caniuse-lite) is 6 months old. 可以看到,执行是没问题,只是这个Warn太刺眼,需要解决。 看到下方提示:请执行 npx update-browserslist-db@…

2025 年全屋定制 / 高端 / 装修收纳设计 / 不锈钢橱柜 / 别墅 / 大平层装修公司推荐:苏州伍德家居与百能家居的优质定制解决方案解析

当下高端家居定制市场需求持续攀升,别墅、大平层业主对居住空间的环保性、收纳性与美学性提出更高要求。但市场上产品质量参差不齐,部分品牌存在材质环保不达标、收纳设计不合理、售后响应滞后等问题,让消费者陷入选…

1_数组

1、相向双指针 15.三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复…

SAS重要证明结论

集合部分: \(if \ A \subseteq B, \ B \subseteq A, \ then \ A = B\) \((\cup_{\alpha \in A} S_{\alpha})^c = \cap_{\alpha \in A} (S_{a})^c\) 有序集部分: \(if \ < is \ an \ order \ on \ S, \ these \ tw…

2025 年蒸汽发生器厂家最新推荐排行榜:含 800KG 燃气 / 超低氮冷凝 / 400KG 燃气等多类型设备企业优选指南

当前蒸汽发生器市场品牌繁杂,产品性能差异显著,从热效率、安全防护到环保合规性等方面,不同品牌表现参差不齐。许多企业在选购时,常因缺乏专业参考,难以精准匹配自身生产需求,不仅可能增加能源消耗与运营成本,还…

基于MATLAB的遗传算法(GA)和CPLEX两种方法解决TSP问题

一、遗传算法实现 1. 核心代码 function tsp_ga()% 参数设置numCities = 20; % 城市数量popSize = 100; % 种群大小maxGen = 500; % 最大迭代次数pc = 0.8; % 交叉概率p…

创建数字遗嘱:为亲人留下数字足迹指南

本文探讨了在数字化时代如何管理个人数字资产,包括电子邮件、社交媒体账号、金融账户等数字足迹,并提出了创建数字遗嘱的重要性,帮助亲人在我们离世后妥善处理这些数字遗产。无论我们喜欢与否,我们的生活都已高度数…

全网首发/Qt结合ffmpeg实现rist推拉流/可信赖的互联网流媒体协议/跨平台支持各个系统

一、前言说明 现在音视频时代发展真快,各种协议层出不穷,一个是满足现在的需求,一个是为了满足新的需求,之前搞过rtmp、rtsp、srt、udp推拉流,现在又新出了个rist,乍一看还以为是rtsp的堂弟,其实不搭边的,RIST…

2025 年最新推荐压缩机厂家排行榜:聚焦医药 / 医疗 / 食品 / 冷链 / 工业领域优质企业及核心优势盘点

当前制冷工业领域,压缩机作为核心部件,其品质直接决定制冷设备的效率与稳定性。但市场品牌繁杂,产品质量差异显著,医药、医疗等特殊领域对压缩机高精度、高可靠性的需求难以被全面满足,多数采购者缺乏权威参考,难…

2025 年灌装机厂家最新推荐权威榜单:聚焦全自动液体定量灌装设备,精选饮用水 / 纯净水 / 矿泉水灌装领域优质企业

当前液体产品生产行业中,灌装机作为核心生产设备,其品质与性能直接关系到企业生产效率、产品质量及成本控制。但市场上灌装机厂家数量繁杂,产品质量参差不齐,部分厂家仅能提供单一设备,缺乏全流程服务,导致企业采…