当前位置:   article > 正文

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通)_spring boot 3.0 graalvm native image support

spring boot 3.0 graalvm native image support

说明:都知道,我是搞java的,最近搞c的算法和redis数据库比较多,所以对于以下文章,都是我自己这样认为的,各位看完之后,可尽情评论。

GraalVM Native Image Support 具体用法

以往文章:

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的

第一步:安装Visual Studio  2022

你们可以参考一下我的,这些都要勾选一下

 第二步:配置环境变量

   安装好了之后,右键打开文件的所在位置。

一般都在这两个文件夹里面,第二步,配置环境变量。

配置一下INCLUDE库和LIB库

第三步:搭建springboot项目

MyApplication.java

  1. package org.cyl.test04;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.RestController;
  6. @RestController
  7. @SpringBootApplication
  8. public class MyApplication {
  9. @RequestMapping("/")
  10. String home() {
  11. return "Hello World!";
  12. }
  13. public static void main(String[] args) {
  14. SpringApplication.run(MyApplication.class, args);
  15. }
  16. }

pom文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>org.cyl</groupId>
  6. <artifactId>test04</artifactId>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <name>test04</name>
  9. <description>test04</description>
  10. <properties>
  11. <java.version>17</java.version>
  12. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  13. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  14. <spring-boot.version>3.2.1</spring-boot.version>
  15. </properties>
  16. <parent>
  17. <groupId>org.springframework.boot</groupId>
  18. <artifactId>spring-boot-starter-parent</artifactId>
  19. <version>3.2.1</version>
  20. </parent>
  21. <dependencies>
  22. <dependency>
  23. <groupId>org.springframework.boot</groupId>
  24. <artifactId>spring-boot</artifactId>
  25. </dependency>
  26. <dependency>
  27. <groupId>org.springframework.boot</groupId>
  28. <artifactId>spring-boot-starter-web</artifactId>
  29. </dependency>
  30. <dependency>
  31. <groupId>org.springframework.boot</groupId>
  32. <artifactId>spring-boot-starter-test</artifactId>
  33. <scope>test</scope>
  34. </dependency>
  35. </dependencies>
  36. <dependencyManagement>
  37. <dependencies>
  38. <dependency>
  39. <groupId>org.springframework.boot</groupId>
  40. <artifactId>spring-boot-dependencies</artifactId>
  41. <version>${spring-boot.version}</version>
  42. <type>pom</type>
  43. <scope>import</scope>
  44. </dependency>
  45. </dependencies>
  46. </dependencyManagement>
  47. <build>
  48. <plugins>
  49. <plugin>
  50. <groupId>org.apache.maven.plugins</groupId>
  51. <artifactId>maven-compiler-plugin</artifactId>
  52. <version>3.8.1</version>
  53. <configuration>
  54. <source>17</source>
  55. <target>17</target>
  56. <encoding>UTF-8</encoding>
  57. </configuration>
  58. </plugin>
  59. <plugin>
  60. <groupId>org.graalvm.buildtools</groupId>
  61. <artifactId>native-maven-plugin</artifactId>
  62. <configuration>
  63. <imageName>sb</imageName>
  64. <mainClass>org.cyl.test04.MyApplication</mainClass>
  65. <buildArgs>
  66. --no-fallback
  67. </buildArgs>
  68. </configuration>
  69. <executions>
  70. <execution>
  71. <id>build-native</id>
  72. <goals>
  73. <goal>compile-no-fork</goal>
  74. </goals>
  75. <phase>package</phase>
  76. </execution>
  77. </executions>
  78. </plugin>
  79. </plugins>
  80. </build>
  81. <repositories>
  82. <repository>
  83. <id>spring-releases</id>
  84. <name>Spring Releases</name>
  85. <url>https://repo.spring.io/release</url>
  86. <snapshots>
  87. <enabled>false</enabled>
  88. </snapshots>
  89. </repository>
  90. </repositories>
  91. </project>

第四步:进行打包即可

由于pom文件的原因,打包后会生成sb.exe可部署文件

第五步:双击运行项目

打开localhost:8080

结果展示:

虚拟线程具体用法

虚拟线程在java20的时候就在孵化了,在jdk21稳定版的时候推出来的。

所以要想使用虚拟线程,必须将自己的jdk升级到21版本。

虚拟线程的一个副作用是这些线程是守护程序线程。 如果没有非守护程序线程,JVM 将退出。 当您依赖时,这种行为可能是一个问题,例如 bean 来保持应用程序处于活动状态。 如果使用虚拟线程,那么调度程序线程是虚拟线程,因此是守护程序线程,不会使 JVM 保持活动状态。 这不仅会影响调度,其他技术也可能是这种情况! 要使 JVM 在所有情况下都保持运行,建议将该属性设置为spring.main.keep-alive=true 。 这确保了 JVM 保持活动状态,即使所有线程都是虚拟线程。

那么如何在springboot3中使用虚拟线程呢?

很简单,只需要设置一个属性即可:

spring.threads.virtual.enabled=true

第一步:搭建项目

在这里特别吐槽一下:

阿里云的镜像,现在还没有jdk21的选项。

不过无所谓,咱们直接去官网

当然官网的网速肯定很慢,不过我相信以看到我文章的各位水平而言,这不算什么。

这里我们就选Web,因为仅仅测试虚拟线程而已。

把该删的都删了,就好了。

pom文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>3.2.1</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>org.cyl</groupId>
  12. <artifactId>test05</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>test05</name>
  15. <description>test05</description>
  16. <properties>
  17. <java.version>21</java.version>
  18. </properties>
  19. <dependencies>
  20. <dependency>
  21. <groupId>org.springframework.boot</groupId>
  22. <artifactId>spring-boot-starter-web</artifactId>
  23. </dependency>
  24. <dependency>
  25. <groupId>org.springframework.boot</groupId>
  26. <artifactId>spring-boot-starter-test</artifactId>
  27. <scope>test</scope>
  28. </dependency>
  29. </dependencies>
  30. <build>
  31. <plugins>
  32. <plugin>
  33. <groupId>org.springframework.boot</groupId>
  34. <artifactId>spring-boot-maven-plugin</artifactId>
  35. </plugin>
  36. </plugins>
  37. </build>
  38. </project>

第二步:配置好后启动项目

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/68635?site
推荐阅读
相关标签
  

闽ICP备14008679号