赞
踩
说明:都知道,我是搞java的,最近搞c的算法和redis数据库比较多,所以对于以下文章,都是我自己这样认为的,各位看完之后,可尽情评论。
以往文章:
Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)-CSDN博客
利用GraalVM将java文件变成exe可执行文件-CSDN博客
概述:我们为什么执意将springboot web项目变成可执行文件?那是因为谁也不想每次部署的时候都要携带一个jre,无论是docker部署,都要携带jdk,而GraalVM Native Image Support 解决这个问题。
概述:我们为什么要使用虚拟线程?因为jdk本身的线程与内核线程的关系就是1对1的,太浪费内核线程资源了。关于虚拟线程,我会专门出一篇文章讲这个的。现在讲述如何在springboot中使用虚拟线程
在这之前,各位要先把jdk换成GraalVM,把JAVA_HOME变成GraalVM的
你们可以参考一下我的,这些都要勾选一下
安装好了之后,右键打开文件的所在位置。
一般都在这两个文件夹里面,第二步,配置环境变量。
配置一下INCLUDE库和LIB库
MyApplication.java
- package org.cyl.test04;
-
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
-
- @RestController
- @SpringBootApplication
- public class MyApplication {
-
- @RequestMapping("/")
- String home() {
- return "Hello World!";
- }
-
- public static void main(String[] args) {
- SpringApplication.run(MyApplication.class, args);
- }
-
- }
-
pom文件
- <?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.cyl</groupId>
- <artifactId>test04</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <name>test04</name>
- <description>test04</description>
- <properties>
- <java.version>17</java.version>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
- <spring-boot.version>3.2.1</spring-boot.version>
- </properties>
-
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>3.2.1</version>
- </parent>
-
-
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-dependencies</artifactId>
- <version>${spring-boot.version}</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>3.8.1</version>
- <configuration>
- <source>17</source>
- <target>17</target>
- <encoding>UTF-8</encoding>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.graalvm.buildtools</groupId>
- <artifactId>native-maven-plugin</artifactId>
- <configuration>
- <imageName>sb</imageName>
- <mainClass>org.cyl.test04.MyApplication</mainClass>
- <buildArgs>
- --no-fallback
- </buildArgs>
- </configuration>
- <executions>
- <execution>
- <id>build-native</id>
- <goals>
- <goal>compile-no-fork</goal>
- </goals>
- <phase>package</phase>
- </execution>
- </executions>
- </plugin>
-
- </plugins>
- </build>
- <repositories>
- <repository>
- <id>spring-releases</id>
- <name>Spring Releases</name>
- <url>https://repo.spring.io/release</url>
- <snapshots>
- <enabled>false</enabled>
- </snapshots>
- </repository>
- </repositories>
-
- </project>
由于pom文件的原因,打包后会生成sb.exe可部署文件
结果展示:
虚拟线程在java20的时候就在孵化了,在jdk21稳定版的时候推出来的。
所以要想使用虚拟线程,必须将自己的jdk升级到21版本。
虚拟线程的一个副作用是这些线程是守护程序线程。 如果没有非守护程序线程,JVM 将退出。 当您依赖时,这种行为可能是一个问题,例如 bean 来保持应用程序处于活动状态。 如果使用虚拟线程,那么调度程序线程是虚拟线程,因此是守护程序线程,不会使 JVM 保持活动状态。 这不仅会影响调度,其他技术也可能是这种情况! 要使 JVM 在所有情况下都保持运行,建议将该属性设置为spring.main.keep-alive=
true
。 这确保了 JVM 保持活动状态,即使所有线程都是虚拟线程。
那么如何在springboot3中使用虚拟线程呢?
很简单,只需要设置一个属性即可:
spring.threads.virtual.enabled=true
在这里特别吐槽一下:
阿里云的镜像,现在还没有jdk21的选项。
不过无所谓,咱们直接去官网
当然官网的网速肯定很慢,不过我相信以看到我文章的各位水平而言,这不算什么。
这里我们就选Web,因为仅仅测试虚拟线程而已。
把该删的都删了,就好了。
pom文件
- <?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>3.2.1</version>
- <relativePath/> <!-- lookup parent from repository -->
- </parent>
- <groupId>org.cyl</groupId>
- <artifactId>test05</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <name>test05</name>
- <description>test05</description>
- <properties>
- <java.version>21</java.version>
- </properties>
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
-
- </project>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。