SpringBoot整合web容器 - 编程一生

SpringBoot整合web容器 - 编程一生

💡 原文中文,约3000字,阅读约需7分钟。
📝

内容提要

文章介绍Spring Boot整合Web容器的方法:通过Maven排除Tomcat依赖并引入Jetty,实现嵌入式容器。对比两者,Jetty更轻量、省内存、高效且可插拔扩展,适合分布式环境;Tomcat支持企业级高级特性但通常用不到。作者建议选用Jetty。

🔎

延伸解读

嵌入式容器的价值主要在DevOps便利性

文章指出,嵌入式Web容器与非嵌入式容器的差别并非性能或稳定性,而是更便于DevOps。这意味着选择Jetty或Tomcat时,若团队的基础设施和部署流程尚未标准化,嵌入式容器带来的运维简化可能有限。作者也提到大公司因历史包袱普及新标准较慢,因此技术选型需结合公司实际的基础设施成熟度,而非单纯追求新技术。

Jetty与Tomcat的选型依据

文章对比表显示,Jetty在轻量、省内存、快速高效、可插拔性和可扩展性上占优,适合分布式环境;Tomcat则支持企业级高级特性,但一般用不到且收费。作者建议选用Jetty,并提到Google App Engine选择Jetty,使其在云环境下成为默认选择。读者可据此评估自身项目是否依赖Tomcat的高级特性,否则Jetty是更轻量的替代。

依赖排除是整合的关键步骤

文章强调,在Spring Boot中整合Jetty需在引入spring-boot-starter-web时显式排除spring-boot-starter-tomcat,再引入spring-boot-starter-jetty。同时提醒统一版本,并列出五个建议显式引入的jar包,其中两个测试依赖的scope为test。这提示开发者,依赖冲突仍是痛点,手动管理关键依赖可避免容器冲突和版本不一致问题。

❓

Q&A

Spring Boot 如何将默认的 Tomcat 容器替换为 Jetty?

在 Maven 的 pom.xml 中,先引入 spring-boot-starter-web 依赖,并在其中通过 <exclusions> 排除 spring-boot-starter-tomcat,然后单独添加 spring-boot-starter-jetty 依赖。这样即可使用 Jetty 作为嵌入式 Web 容器。

Jetty 和 Tomcat 主要有哪些区别?

Jetty 更轻量、节省内存、快速高效,且具有更好的可插拔性和可扩展性,更适合分布式环境;Tomcat 则支持一些企业级应用的高级特性,但这些特性一般用不到,且用到时可能收费。

为什么作者建议使用 Jetty 而不是 Tomcat?

因为 Jetty 更轻量、节省内存、高效且可插拔扩展,能满足分布式环境的需求;而 Tomcat 的企业级高级特性通常用不到,且可能收费。此外,Google App Engine 选择了 Jetty,使其在云环境下成为默认选择。

嵌入式 Web 容器和非嵌入式 Web 容器有什么差别?

嵌入式 Web 容器更便于 DevOps,但并没有性能和稳定性的差别。非嵌入式容器通常是公司统一的标准,在大公司中普及新标准较慢,因为存在历史包袱。

Spring Boot 项目通常需要显式引入哪些依赖?

一般需要显式引入 5 个 jar 包:spring-boot-autoconfigure、spring-boot-starter-web(需排除 logging 和 tomcat)、spring-boot-starter-jetty,以及测试用的 spring-boot-test 和 spring-boot-starter-test(注意统一版本)。

Spring Boot 的核心理念是什么?

Spring Boot 的理念是“约定大于配置”,通过标准化、流程化、工具化来降低复杂度,让开发者更少感知框架的存在,从而简化 Java 开发。

🏷️

标签

➡️

继续阅读