Spring Boot Webflux程序application.properties配置文件:
server.port=3000spring.r2dbc.url=r2dbc:mysql://localhost:3306/testdbspring.r2dbc.username=dbserspring.r2dbc.password=dbpwdUser实体(这里DD也省略了构造函数、getter和setter):
public class User {@Idprivate String email;private String first;private String last;private String city;private String county;private int age;// 省略了构造函数、getter、setter}应用主类:
@EnableWebFlux@SpringBootApplicationpublic class UserApplication {public static void main(String[] args) {SpringApplication.run(UserApplication.class, args);}}提供CRUD操作的UserRepository:
public interface UserRepository extends R2dbcRepository<User, String> {}提供根据id查用户的业务类UserService:
@Servicepublic class UserService {@AutowiredUserRepository userRepository;public Mono<User> findById(String id) {return userRepository.findById(id);}}提供API接口的UserController类:
@RestController@RequestMapping("/")public class UserController {@AutowiredUserService userService;private SignatureAlgorithm sa = SignatureAlgorithm.HS256;private String jwtSecret = System.getenv("JWT_SECRET");@GetMapping("/")@ResponseStatus(HttpStatus.OK)public Mono<User> getUserById(@RequestHeader(HttpHeaders.AUTHORIZATION) String authHdr) {String jwtString = authHdr.replace("Bearer","");Claims claims = Jwts.parser().setSigningKey(jwtSecret.getBytes()).parseClaimsJws(jwtString).getBody();return userService.findById((String)claims.get("email"));}}测试结果接下来是重头戏了,作者对两个技术方案都做了500w个请求的测试 , 评估的不同并发连接级别包含:50、100、300 。
具体结果如下三张图:

文章插图
50并发连接

文章插图
100并发连接

文章插图
300并发连接
最后,作者得出结论:Spring Boot Webflux要更优于带虚拟线程的Spring Boot 。

文章插图
似乎引入了虚拟线程还不如已经在用的Webflux?不知道大家是否有做过相关调研呢?如果有的话,欢迎在留言区一起聊聊~我们创建了一个高质量的技术交流群,与优秀的人在一起,自己也会优秀起来,赶紧点击加群,享受一起成长的快乐 。
【Spring Boot虚拟线程的性能还不如Webflux?】
推荐阅读
- 公司用了六年的 SpringBoot 项目部署方案,稳得一批!
- 玩转Spring各种作用域Bean Scope及源码分析
- Spring Boot Starter的原理
- Spring 七种事务传播性介绍
- 基于深度学习的虚拟现实图像生成技术研究与应用
- 简易版的SpringBoot是如何实现的!!!
- Java 21 神仙特性:虚拟线程使用指南
- 响应式编程又变天了?看JDK21虚拟线程如何颠覆!
- Spring非常实用的技巧,你确定知道?
- 三分钟理解 Java 虚拟线程
