开发喵星球

若依使用undertow来替代tomcat容器(247)

需求提出

使用 Undertow 替代 Tomcat 作为若依管理系统的 Web 容器,以提升系统在高并发场景下的性能。

相关介绍

Spring Boot 默认使用 Tomcat 作为内嵌的 Web 容器,但我们可以选择其他容器,如 UndertowUndertow 是一个灵活的高性能 Web 服务器,适用于高并发场景,性能优于 Tomcat

解决思路

  1. pom.xml 文件中排除 Tomcat 依赖,并添加 Undertow 依赖。
  2. 修改 application.yml 文件,配置 Undertow 的相关参数。
  3. 修改文件上传工具类 FileUploadUtils.java,以适配 Undertow 的文件上传机制。

所需技术

项目结构

ruoyi-framework
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── ruoyi
│   │   │           └── framework
│   │   │               └── util
│   │   │                   └── FileUploadUtils.java
│   │   ├── resources
│   │   │   └── application.yml
├── pom.xml

注意事项

  1. 确保所有依赖版本兼容。
  2. 修改代码时注意路径和文件名的准确性。
  3. Undertow 的配置参数需要根据实际情况进行调整。

完整代码

第一步: 修改 pom.xml 文件,排除 Tomcat 依赖并添加 Undertow 依赖

<!-- SpringBoot Web容器 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <exclusions>
    <exclusion>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <groupId>org.springframework.boot</groupId>
    </exclusion>
  </exclusions>
</dependency>

<!-- web 容器使用 undertow -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-undertow</artifactId>
</dependency>

第二步: 修改 application.yml 文件,配置 Undertow

# 开发环境配置
server:
  # 服务器的HTTP端口,默认为80
  port: 80
  servlet:
    # 应用的访问路径
    context-path: /
  # undertow 配置
  undertow:
    # HTTP post内容的最大大小。当值为-1时,默认值为大小是无限的
    max-http-post-size: -1
    # 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
    # 每块buffer的空间大小,越小的空间被利用越充分
    buffer-size: 512
    # 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
    io-threads: 8
    # 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
    worker-threads: 256
    # 是否分配的直接内存
    direct-buffers: true

第三步: 修改文件上传工具类 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. 编译和打包项目
    mvn clean install
    
  2. 启动项目
    java -jar target/ruoyi-framework.jar
    
  3. 验证
    • 访问配置的 HTTP 端口,确保应用程序正常启动。
    • 进行文件上传操作,确保文件上传功能正常工作。

总结

通过上述步骤,我们成功地将若依管理系统的 Web 容器从 Tomcat 替换为 Undertow,并对相关配置和代码进行了适配。在高并发场景下,使用 Undertow 可以显著提升系统性能。

   
分类:Java/OOP 作者:无限繁荣, 吴蓉 发表于:2024-06-22 02:41:27 阅读量:116
<<   >>


powered by kaifamiao