SpringBoot3 使用虚拟线程

目录

环境

说明

application.properties

pom.xml

[Controller Java](#Controller Java)

验证


环境

|------------|----------------------|
| Java | Java: graalvm-jdk-21 |
| Springboot | 3.3.1 |

说明

springboot3.x 打开虚拟线程非常简单,只需添加一行配置信息即可。

spring.threads.virtual.enabled = true

application.properties

XML 复制代码
spring.threads.virtual.enabled = true

pom.xml

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>boot3-01-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.3.1</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.graalvm.buildtools</groupId>
                <artifactId>native-maven-plugin</artifactId>
                <extensions>true</extensions>
                <executions>
                    <execution>
                        <id>build-native</id>
                        <goals>
                            <goal>compile-no-fork</goal>
                        </goals>
                        <phase>package</phase>
                    </execution>
                    <execution>
                        <id>test-native</id>
                        <goals>
                            <goal>test</goal>
                        </goals>
                        <phase>test</phase>
                    </execution>
                </executions>
                <configuration>
                    <imageName>${project.artifactId}</imageName>
                    <mainClass>com.hb.MyApplication</mainClass>
                    <buildArgs>--no-fallback</buildArgs>
                    <agent>
                        <enabled>true</enabled>
                    </agent>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>21</source>
                    <target>21</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

Controller Java

java 复制代码
package com.hb.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloWorldController {

    @GetMapping("/hello")
    public String hello() {
        System.out.printf("当前执行线程: %s%n", Thread.currentThread()) ;
        return "HELLO WORLD";
    }
}

验证

访问: http://localhost:8080/hello

控制台输出:

当前执行线程: VirtualThread[#40,tomcat-handler-0]/runnable@ForkJoinPool-1-worker-1

当前执行线程: VirtualThread[#46,tomcat-handler-1]/runnable@ForkJoinPool-1-worker-1

当前执行线程: VirtualThread[#47,tomcat-handler-2]/runnable@ForkJoinPool-1-worker-1

当前执行线程: VirtualThread[#48,tomcat-handler-3]/runnable@ForkJoinPool-1-worker-1

当前执行线程: VirtualThread[#49,tomcat-handler-4]/runnable@ForkJoinPool-1-worker-1

当前执行线程: VirtualThread[#50,tomcat-handler-5]/runnable@ForkJoinPool-1-worker-1

当前执行线程: VirtualThread[#51,tomcat-handler-6]/runnable@ForkJoinPool-1-worker-1

当设置成 spring.threads.virtual.enabled = false

当前执行线程: Thread[#37,http-nio-8080-exec-1,5,main]

当前执行线程: Thread[#39,http-nio-8080-exec-3,5,main]

当前执行线程: Thread[#38,http-nio-8080-exec-2,5,main]

当前执行线程: Thread[#40,http-nio-8080-exec-4,5,main]

当前执行线程: Thread[#41,http-nio-8080-exec-5,5,main]

当前执行线程: Thread[#42,http-nio-8080-exec-6,5,main]

当前执行线程: Thread[#43,http-nio-8080-exec-7,5,main]

当前执行线程: Thread[#44,http-nio-8080-exec-8,5,main]

当前执行线程: Thread[#45,http-nio-8080-exec-9,5,main]

相关推荐
rKWP8gKv74 分钟前
Java微服务性能监控:Prometheus与Grafana集成方案
java·微服务·prometheus
老前端的功夫7 分钟前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
qq_435287927 分钟前
第9章 夸父逐日与后羿射日:死循环与进程终止?十个太阳同时值班的并行冲突
java·开发语言·git·死循环·进程终止·并行冲突·夸父逐日
小江的记录本9 分钟前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka
止语Lab19 分钟前
从手动到框架:Go DI 演进的三个拐点
开发语言·后端·golang
yaoxin52112334 分钟前
397. Java 文件操作基础 - 创建常规文件与临时文件
java·开发语言·python
小短腿的代码世界38 分钟前
Qt日志系统深度解析:从qDebug到企业级日志框架
开发语言·qt
REDcker1 小时前
浏览器端Web程序性能分析与优化实战 DevTools指标与工程清单
开发语言·前端·javascript·vue·ecmascript·php·js
极客先躯3 小时前
高级java每日一道面试题-2025年11月24日-容器与虚拟化题[Dockerj]-runc 的作用是什么?
java·oci 的命令行工具·最小可用·无守护进程·完全标准·创建容器的核心流程·runc 核心职责思维导图
用户60648767188963 小时前
AI 抢不走的技能:用 Claude API 构建自动化工作流实战
java