首页 > 其他分享 >为什么很多公司 SpringBoot 项目禁止使用 Tomcat

为什么很多公司 SpringBoot 项目禁止使用 Tomcat

时间:2024-01-15 23:33:20浏览次数:45  
标签:Web 禁止 Undertow SpringBoot Tomcat 容器 服务器

为什么很多公司 SpringBoot 项目禁止使用 Tomcat

学习改变命运,技术铸就辉煌。

大家好,我是銘,全栈开发程序员。

前言

在 SpringBoot 框架中,我们使用最多的是 Tomcat,这是 SpringBoot 默认的容器技术,而且是内嵌式的 Tomcat。同时,SpringBoot 也支持 Undertow 容器,我们可以很方便的用 Undertow 替换Tomcat,而 Undertow 的性能和内存使用方面都优于 Tomcat,那我们如何使用 Undertow 技术呢?本文将为大家细细讲解。

SpringBoot 中的 Tomcat 容器

SpringBoot 可以说是目前最火的 Java Web 框架了。它将开发者从繁重的 xml 解救了出来,让开发者在几分钟内就可以创建一个完整的 Web 服务,极大的提高了开发者的工作效率。Web 容器技术是 Web 项目必不可少的组成部分,因为任 Web 项目都要借助容器技术来运行起来。在 SpringBoot 框架中,我们使用最多的是 Tomcat,这是 SpringBoot 默认的容器技术,而且是内嵌式的 Tomcat。

image-20240115230624044

SpringBoot 设置 Undertow

对于 Tomcat 技术,Java 程序员应该都非常熟悉,它是 Web 应用最常用的容器技术。我们最早的开发的项目基本都是部署在 Tomcat 下运行,那除了 Tomcat 容器,SpringBoot 中我们还可以使用什么容器技术呢?没错,就是题目中的 Undertow 容器技术。SrpingBoot 已经完全继承了 Undertow 技术,我们只需要引入 Undertow 的依赖即可,如下图所示。

image-20240115230939704

image-20240115230949958

配置好以后,我们启动应用程序,发现容器已经替换为 Undertow。

那我们为什么需要替换 Tomcat 为 Undertow 技术呢?

Tomcat 与 Undertow 的优劣对比

Tomcat 是 Apache 基金下的一个轻量级的 Servlet 容器,支持 Servlet 和 JSP。Tomcat 具有 Web 服务器特有的功能,包括 Tomcat 管理和控制平台、安全局管理和 Tomcat 阀等。Tomcat 本身包含了HTTP 服务器,因此也可以视作单独的 Web 服务器。但是,Tomcat 和 ApacheHTTP 服务器不是一个东西,ApacheHTTP 服务器是用 C 语言实现的 HTTP Web 服务器。Tomca t是完全免费的,深受开发者的喜爱。

image-20240115231100778

Undertow 是 Red Hat 公司的开源产品, 它完全采用 Java 语言开发,是一款灵活的高性能 Web 服务器,支持阻塞 IO 和非阻塞 IO。由于 Undertow 采用 Java 语言开发,可以直接嵌入到 Java 项目中使用。同时, Undertow 完全支持 Servlet 和 Web Socket,在高并发情况下表现非常出色。

image-20240115231135460

我们在相同机器配置下压测Tomcat和Undertow,得到的测试结果如下所示:

  • QPS测试结果对比:

image-20240115231424868

Undertow

image-20240115231443964

  • 内存使用对比:

Tomcat

image-20240115231335934

Undertow

image-20240115231347201

通过测试发现,在高并发系统中,Tomcat 相对来说比较弱。在相同的机器配置下,模拟相等的请求数,Undertow 在性能和内存使用方面都是最优的。并且 Undertow 新版本默认使用持久连接,这将会进一步提高它的并发吞吐能力。所以,如果是高并发的业务系统,Undertow 是最佳选择。

最后

SpingBoot 中我们既可以使用 Tomcat 作为 Http 服务,也可以用 Undertow 来代替。Undertow 在高并发业务场景中,性能优于 Tomcat。所以,如果我们的系统是高并发请求,不妨使用一下Undertow,你会发现你的系统性能会得到很大的提升。

我是銘,欢迎小伙伴加VX交流,VX:imljs01

标签:Web,禁止,Undertow,SpringBoot,Tomcat,容器,服务器
From: https://www.cnblogs.com/songqwu/p/17966650

相关文章

  • springboot拦截器@resource注解注入为null解决方案 拦截适配配置
    springboot拦截器@resource注解注入为null解决方案 拦截适配配置为什么@resource注入为nullinteceptor在springcontext之前加载,注入必然是null解决方案加入注解@Bean,注意需要使用@Configuration,而不是@Component解决在Spring添加拦截器之前先自己创建一下这个SpringBean,这样......
  • springboot项目配置多数据源
    springboot项目配置多数据源//关键:mybatis文件的目录需要区分开来sqlSessionFactoryBean.setMapperLocations(newPathMatchingResourcePatternResolver().getResources("classpath:mybatis.myProjectOne/*.xml"));#从数据库配置,数据库的配置以spring.datasource.myPr......
  • Idea SpringBoot 子模块 加载不到该子模块根目录config下面的配置文件
    IdeaSpringBoot子模块加载不到该子模块根目录config下面的配置文件importorg.mybatis.spring.annotation.MapperScan;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframew......
  • springboot + mybatis plus 全局添加查询字段反引号
    配置文件添加: column-format:"`%s`"mybatis-plus:#启动时是否检查MyBatisXML文件是否存在check-config-location:true#MyBatis原生配置configuration:#字段名称下划线转驼峰命名map-underscore-to-camel-case:trueglobal-config:db-co......
  • SpringBoot中整合ElasticSearch实现增删改查等操作
    场景SpringBoot中整合ElasticSearch快速入门以及踩坑记录:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/135599698在上面进行集成的基础上,实现对ES数据的增删改查等操作。注:博客:https://blog.csdn.net/badao_liumang_qizhi实现1、ElastciSearch的对象映射h......
  • python logging 禁止日志输出
    1只会禁用特定日志记录器,其他日志记录器仍可以将消息输出到控制台格式:logging.getLogger("某日志记录器").disabled=True例:logging.getLogger("tornado").disabled=True2阻止这些日志记录器将日志消息传播到更高级别的父级记录器,从而不会显示在控制台上;请注意,其他日志......
  • SpringBoot中整合ElasticSearch快速入门以及踩坑记录
    场景若依前后端分离版手把手教你本地搭建环境并运行项目:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108465662参考上面搭建项目。ElaticSearchElasticsearch是java开发的,基于Lucene的搜索引擎。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTfulW......
  • SpringBoot 项目打成jar包并部署
    #打包在SpringBoot的pom文件中加入下列代码```XML<build><!--<finalName>census</finalName>--><plugins><plugin><groupId>org.springframework.boot</groupId><ar......
  • SpringBoot 2.x 正式停更了。Java 8 就看 Solon 的了!
    最近有好多个新闻说:SpringBoot2.x正式停更了,Java8怎么办?当然用Solon喽!Solon,同时支持jdk8,jdk11,jdk17,jdk21。也支持graalvmnativeimage。既支持java8,也支持java21的:@SolonMainpublicclassApp{publicstaticvoidmain(String[]args){Sol......
  • SpringBoot动态权限校验,常用的实现方案
    SpringBoot.pngSpringBoot是由Pivotal团队提供的一套开源框架,可以简化spring应用的创建及部署。它提供了丰富的Spring模块化支持,可以帮助开发者更轻松快捷地构建出企业级应用。SpringBoot通过自动配置功能,降低了复杂性,同时支持基于JVM的多种开源框架,可以缩短开发时间,使开发更......