使用 Undertow
替代 Tomcat
作为若依管理系统的 Web
容器,以提升系统在高并发场景下的性能。
Spring Boot
默认使用 Tomcat
作为内嵌的 Web
容器,但我们可以选择其他容器,如 Undertow
。Undertow
是一个灵活的高性能 Web
服务器,适用于高并发场景,性能优于 Tomcat
。
pom.xml
文件中排除 Tomcat
依赖,并添加 Undertow
依赖。application.yml
文件,配置 Undertow
的相关参数。FileUploadUtils.java
,以适配 Undertow
的文件上传机制。ruoyi-framework
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── ruoyi
│ │ │ └── framework
│ │ │ └── util
│ │ │ └── FileUploadUtils.java
│ │ ├── resources
│ │ │ └── application.yml
├── pom.xml
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;
}
mvn clean install
java -jar target/ruoyi-framework.jar
通过上述步骤,我们成功地将若依管理系统的 Web 容器从 Tomcat 替换为 Undertow,并对相关配置和代码进行了适配。在高并发场景下,使用 Undertow 可以显著提升系统性能。
powered by kaifamiao