目录
[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]