目录
Spring 生态的重要性不用多说,Spring Boot 已经成为 Java 后端开发的"标准",但是一个Spring Boot 项目到底能同时应对多少请求呢?你有没有考虑过这个问题呢?这时你可能会问,处理的业务是什么?服务的配置是什么样的?使用的 WEB 容器是什么等等问题,当然我们说的是默认配置,即什么也不配置的情况下到底能应对多少并发请求?
下面我们通过项目演示逐步深入到源码内部,带你去揭开谜底,首先是项目搭建。
一、项目搭建
项目结构很简单,三个类,一个配置文件,其中一个还是启动类,使用的Spring Boot 版本是 2.2.1.RELEASE。
添加依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.4.0</version>
</dependency>
</dependencies>
测试接口代码
@Slf4j
@RestController
public class TestController {
@GetMapping("/testRequest")
public void test(int num) throws InterruptedException {
log.info("{} 接受到请求:num={}", Thread.currentThread().getName(), num);
// 这里让线程睡眠时间长,保证会阻塞住,方便验证
TimeUnit.HOURS.sleep(1);
}
}
下面在来看调试代码,当然你可以使用 Jmeter 等压测工具,这样显的高达上,这里我们使用一个循环不断调用测试接口,具体代码如下:
public class RequestTest {
public static void main(String[] args) {
for (int i = 0; i < 1000; i++) {
int finalI = i;
new Thread(() -> {
HttpUtil.get("http://127.0.0.1:8080/testRequest?num=" + finalI);
}).start();
}
// 阻塞主线程
Thread.yield();
}
}
注意,我们的 application.properties 配置文件中什么内容也没有添加。
二、验证最大并发数
首先启动项目,让服务跑起来,然后运行 RequestTest.main,这时我们的接口就会收到大量的请求,具体如下:
接下来,我们直接统计打印的日志,就能统计出处理了多少并发请求。通过下图可以看到