Springboot3新特性: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

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

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通)_第1张图片

 第二步:配置环境变量

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

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通)_第2张图片

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通)_第3张图片

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

配置一下INCLUDE库和LIB库

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通)_第4张图片

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通)_第5张图片

第三步:搭建springboot项目

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通)_第6张图片

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文件



    4.0.0
    org.cyl
    test04
    0.0.1-SNAPSHOT
    test04
    test04
    
        17
        UTF-8
        UTF-8
        3.2.1
    

    
        org.springframework.boot
        spring-boot-starter-parent
        3.2.1
    


    
        
            org.springframework.boot
            spring-boot
        
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    
    
        
            
                org.springframework.boot
                spring-boot-dependencies
                ${spring-boot.version}
                pom
                import
            
        
    

    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.8.1
                
                    17
                    17
                    UTF-8
                
            
            
                org.graalvm.buildtools
                native-maven-plugin
                
                    sb
                    org.cyl.test04.MyApplication
                    
                        --no-fallback
                    
                
                
                    
                        build-native
                        
                            compile-no-fork
                        
                        package
                    
                
            

        
    
    
        
            spring-releases
            Spring Releases
            https://repo.spring.io/release
            
                false
            
        
    


Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通)_第7张图片

第四步:进行打包即可

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通)_第8张图片

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

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通)_第9张图片

第五步:双击运行项目

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通)_第10张图片

打开localhost:8080

结果展示:

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通)_第11张图片

虚拟线程具体用法

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

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

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

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

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

spring.threads.virtual.enabled=true

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通)_第12张图片

第一步:搭建项目

在这里特别吐槽一下:

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

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通)_第13张图片

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

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通)_第14张图片

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

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

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通)_第15张图片

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

pom文件



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        3.2.1
         
    
    org.cyl
    test05
    0.0.1-SNAPSHOT
    test05
    test05
    
        21
    
    
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通)_第16张图片

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

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通)_第17张图片

Springboot3新特性:GraalVM Native Image Support和虚拟线程(从入门到精通)_第18张图片

你可能感兴趣的:(java,spring,spring,boot)