程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 若依框架
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 若依框架
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 快速入门

  • 后端手册

  • 前端手册

  • 组件文档

  • 数据库分析

  • 集成插件

    • 集成 Docker 实现一键部署
    • 升级 Spring Boot 到 3.x 版本
    • 集成 Ehcache 实现本地缓存切换
    • 集成 WebSocket 实现实时通信
    • 集成 Electron 实现桌面应用程序
    • 集成 Atomikos 实现分布式事务
    • 集成 MinIO 实现分布式文件存储
    • 集成 Easy-ES 实现分布式全文检索
    • 使用 `localStorage` 代替 `cookie`
    • 使用 Undertow 替代 Tomcat 容器
      • 1. 修改 pom.xml 文件,切换到 Undertow 容器
      • 2. 配置 application.yml,使用 Undertow 进行优化配置
      • 3. 修改文件上传工具类 FileUploadUtils.java
      • 4. 验证配置
    • 集成 Actuator 实现优雅关闭应用
    • 集成 AJ-Captcha 实现滑块验证码
    • 集成 Sharding-JDBC 实现分库分表
    • 集成 JustAuth 实现第三方授权登录
    • 集成 `watermark-dom` 实现页面水印
    • 集成 MyBatis-Plus 实现 MyBatis 增强
    • 集成 EasyExcel 实现 Excel 表格增强
    • 集成 Knife4j 实现 Swagger 文档增强
    • 集成 Redisson 实现 Redis 分布式锁
    • 集成 IP2Region 实现离线 IP 地址定位
    • 42集成 JSEncrypt 实现密码加密传输
    • 集成 HttpClient 实现 HTTP 接口增强
    • 集成 Druid 实现数据库密码加密功能
    • 集成 Browscap 实现用户代理解析
    • 集成 Dynamic-DataSource 实现多数据源增强
  • 若依框架
  • 集成插件
scholar
2024-08-31
目录

使用 Undertow 替代 Tomcat 容器

# 使用 Undertow 替代 Tomcat 容器的配置详解

在 Spring Boot 项目中,Tomcat 是默认的嵌入式容器,但在高并发的业务场景中,Undertow 提供了更好的性能表现。本文将详细介绍如何将 RuoYi 项目中的 Web 容器从 Tomcat 切换到 Undertow,并优化相关配置。

# 1. 修改 pom.xml 文件,切换到 Undertow 容器

首先,在项目的 ruoyi-framework/pom.xml 文件中,将 Spring Boot 的 Web 容器依赖由 Tomcat 切换为 Undertow。具体步骤如下:

<!-- SpringBoot Web容器 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <!-- 排除默认的 Tomcat 容器 -->
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<!-- 引入 Undertow 作为 Web 容器 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 2. 配置 application.yml,使用 Undertow 进行优化配置

在 application.yml 中,可以对 Undertow 进行详细的配置,以充分发挥其高性能的优势。以下是推荐的配置:

# 开发环境配置
server:
  # 服务器的HTTP端口,默认为80
  port: 80
  servlet:
    # 应用的访问路径
    context-path: /
  undertow:
    # HTTP POST 内容的最大大小。当值为-1时,表示没有限制
    max-http-post-size: -1
    # Buffer 的大小配置,每个 buffer 的空间大小,越小的空间被利用越充分
    buffer-size: 512
    # 是否使用直接内存
    direct-buffers: true
    threads:
      # IO 线程数,主要执行非阻塞任务,通常每个 CPU 核心一个线程
      io: 8
      # 工作线程池大小,处理阻塞任务,如 Servlet 请求,线程数取决于系统负载
      worker: 256
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

配置说明:

  • max-http-post-size:配置 POST 请求内容的最大大小,-1 表示没有限制。
  • buffer-size:指定用于 Undertow 连接的 IO 操作的 buffer 大小,较小的 buffer 能更有效地利用内存。
  • direct-buffers:配置是否使用直接内存,通常对性能有帮助。
  • threads.io 和 threads.worker:分别配置 IO 线程数和工作线程池大小,确保在高并发下 Undertow 的性能得到最大化利用。

# 3. 修改文件上传工具类 FileUploadUtils.java

在使用 Undertow 时,由于其底层文件上传机制与 Tomcat 不同,不再需要手动创建上传文件的物理文件。因此,需要对 FileUploadUtils.java 进行如下修改:

// FileUploadUtils.java

private static final File getAbsoluteFile(String uploadDir, String fileName) throws IOException {
    File desc = new File(uploadDir + File.separator + fileName);

    if (!desc.getParentFile().exists()) {
        desc.getParentFile().mkdirs();
    }
    
    // Undertow 文件上传无需手动创建文件,注释掉文件创建代码
    // if (!desc.exists()) {
    //     desc.createNewFile();
    // }

    return desc;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 4. 验证配置

完成上述配置后,重启项目。访问项目功能并测试各项功能是否正常工作,尤其是高并发场景下的性能表现是否有所提升。


总结

  • 通过以上步骤,您可以成功将 Spring Boot 项目的嵌入式容器从 Tomcat 替换为 Undertow。这种替换不仅能提高应用的性能,还能减少资源的使用,特别是在高并发场景下。确保在替换后进行充分的测试,以验证应用在不同负载下的表现。

  • 在整个过程中,细致的配置和调优非常重要,这能够帮助您最大程度地发挥 Undertow 的性能优势。如果项目对于性能有更高的要求,使用 Undertow 是一个值得考虑的优化方案。

编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08
使用 `localStorage` 代替 `cookie`
集成 Actuator 实现优雅关闭应用

← 使用 `localStorage` 代替 `cookie` 集成 Actuator 实现优雅关闭应用→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式