当前位置: 首页 > news >正文

springboot中使用undertow容器

1、undertow介绍

官网:https://undertow.io/

Undertow 是一个轻量级的、高性能的 Java Web 服务器,由 JBoss 开发并开源。它是基于非阻塞(non-blocking)的I/O模型,具有低资源消耗和高并发处理能力。Undertown 的优势如下:

  • 支持 HTTP/2:Undertow 开箱即支持 HTTP/2,无需重写启动类路径。
  • 支持 HTTP Upgrade:允许通过 HTTP 端口复用多种协议。
  • 支持 Web Socket:Undertow 提供对 Web Sockets 的全面支持,包括 JSR-356 支持。
  • Servlet 4.0:Undertow 支持 Servlet 4.0,包括对嵌入式 Servlet 的支持。还可以在同一部署中混合使用 Servlet 和原生 undertow 非阻塞 handler。
  • 可嵌入式:只需几行代码,即可将 Undertow 嵌入应用程序或独立运行。
  • 灵活性:Undertow 通过链式 handler 进行配置,可以根据需求灵活地添加功能。
  • 在很多场景的测试下, Undertow 的性能都高于 Tomcat。天生适合作为 Spring Boot 应用的嵌入式服务器!

说明:tomcat主要支持以下几种IO 模型:

  1. BIO(Blocking I/O):传统的同步阻塞IO,每个请求都对应一个线程,在处理速度慢的情况下容易造成线程堆积。
  2. NIO(Non-blocking I/O):使用JDK 1.4 和 java.nio 包,支持非阻塞I/O,能够通过少量线程处理大量并发连接,提高了服务器的吞吐量和并发能力。Tomcat 8 及以上版本默认就运行在NIO 模式下。
  3. APR(Apache Portable Runtime):通过JNI 调用Apache HTTP 服务器的核心动态链接库,利用操作系统的非阻塞IO 能力,可以大幅提升处理静态文件和高并发的性能。
  4. AIO(Asynchronous I/O,也称NIO.2):从JDK 7 开始支持的异步非阻塞IO,是目前最先进的IO 模型。

2、springboot中使用undertow

Spring Boot 默认使用 Tomcat 作为嵌入式 Servlet 服务器,所以 spring-boot-starter-web 默认依赖了 spring-boot-starter-tomcat。

要使用 Undertow 首先要从 spring-boot-starter-web 排除 spring-boot-starter-tomcat,再添加 spring-boot-starter-undertow 依赖:

<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><exclusions><!-- 排除 undertow-websockets-jsr 依赖 --><exclusion><groupId>io.undertow</groupId><artifactId>undertow-websockets-jsr</artifactId></exclusion></exclusions>
</dependency>

在springboot中指定端口:(同tomcat)

server.port=8081
server.servlet.session.timeout=2M

undertow配置:

配置项说明示例
server.undertow.accesslog.dirUndertow 访问日志目录。
server.undertow.accesslog.enabled是否启用访问日志。false
server.undertow.accesslog.pattern访问日志的格式。common
server.undertow.accesslog.prefix日志文件前缀。access_log.
server.undertow.accesslog.rotate是否开启日志滚动。true
server.undertow.accesslog.suffix日志文件后缀。log
server.undertow.always-set-keep-alive是否应在所有响应中添加 Connection: keep-alive Header,即使 HTTP 规范没有要求。true
server.undertow.buffer-size每个 buffer 的大小。默认大小是根据 JVM 可用的最大内存确定的。
server.undertow.decode-slash是否应解码已编码的斜线字符(%2F)。如果前端代理不执行相同的解码,解码可能会导致安全问题。只有在传统应用程序需要时才启用。设置后,server.undertow.allow-encoded-slash 无效。
server.undertow.decode-url是否对 URL 进行解码。禁用时,URL 中的百分比编码字符将保持原样。true
server.undertow.direct-buffers是否在 Java 堆外分配 buffer。默认大小是根据 JVM 可用的最大内存确定的。
server.undertow.eager-filter-init是否应在启动时初始化 servlet Filtertrue
server.undertow.max-cookies允许的最大 cookie 数量。这一限制是为了防止基于哈希碰撞的 DOS 攻击。200
server.undertow.max-headers允许的最大 header 数量。这一限制是为了防止基于哈希碰撞的 DOS 攻击。
server.undertow.max-http-post-sizeHTTP post content 的最大大小。当值为-1(默认值)时,大小为无限。-1B
server.undertow.max-parameters允许查询或路径参数的最大数量。这一限制是为了防止基于哈希碰撞的 DOS 攻击。
server.undertow.no-request-timeout在服务器关闭连接之前,连接在不处理请求的情况下闲置的时间。
server.undertow.options.server.*在 io.undertow.UndertowOptions 中定义的服务器选项。
server.undertow.options.socket.*在 org.xnio.Options 中定义的 socket 选项。
server.undertow.preserve-path-on-forward转发请求时是否保留请求路径。false
server.undertow.threads.ioI/O 线程数。默认值为可用的处理器数量。
server.undertow.threads.workerWorker 线程数。默认为 I/O 线程数的 8 倍。
server.undertow.url-charset用于解码 URL 的字符集。UTF-8

3、性能对比

1)吞吐量和响应时间

2)cpu使用率:Undertow < Jetty < Tomcat

3)内存使用率:Undertow < Jetty < Tomcat

4)线程数:Undertow < Jetty < Tomcat

http://www.dtcms.com/a/424227.html

相关文章:

  • 设计模式(C++)详解——备忘录模式(1)
  • 网站内容建设要求age06网站分析流程
  • 怎么在网站上做seo网站源码配置数据库在拿
  • 公司网站案例展示厦门手机网站建设公司
  • 数据要素在医疗领域区域医疗协同的应用现状及未来趋势研究
  • 【JavaSE五天速通|第五篇】高级篇
  • 【每天一个知识点】超图和异构图的不同
  • 网站部兼容是什么原因常用博客建站程序
  • 大模型相关核心信息整合汇总
  • 【term】票据质押和背书的区别
  • 第四部分:VTK常用类详解(第118章 vtkWarpScalar标量变形类)
  • HTB 赛季9靶场 - Imagery
  • 集团微网站建设中企动力初期做的网站
  • 中山网站seo办公资源网
  • 检索增强生成(RAG)全流程解析
  • JAVA:Spring Boot 集成 AspectJ 实现切面编程
  • Promse.all 与 Promise.allSettled
  • 网站本科腾讯企点
  • 杭州高端品牌网站建设网站建设维护升级
  • 上海大规模网站建设平台北京城市副中心投资建设公司网站
  • 360免费建站空间网站建设网络安全
  • 金融适合什么颜色做网站广州seo公司官网
  • DeepSeek-V3.2:DSA稀疏注意力的降本增效
  • SpringBoot 不更改 pom.xml 引入各种 JDBC 驱动 jar 包
  • 【37】C# WinForm入门到精通 —— Winform界面运行后,界面上的字体 图案 整体感觉模糊,解决办法
  • 哪家公司建5g基站网站怎么做qq的授权登陆
  • 做解析视频网站违法莫网站调优技能
  • 个人建设视频网站ppt模板制作免费下载
  • 20250929的学习笔记
  • 字节序和位操作