Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)

在讲述之前,各位先自行在网上下载并安装Visual Studio 2022,安装的时候别忘了勾选msvc

概述:GraalVM 本机应用程序(Native Image)是使用 GraalVM 的一个特性,允许将 Java 应用程序编译成本机二进制文件,而不是传统的 Java 字节码。这意味着你可以将 Java 应用程序编译成一个独立的可执行文件,无需 JVM(Java 虚拟机)即可运行。

以下是 GraalVM 本机应用程序的一些关键特点:

  1. 启动时间快: 由于本机二进制文件不需要解释执行,而是直接在本机执行,因此启动时间通常比传统的 Java 应用程序更快。

  2. 较小的内存占用: 本机应用程序通常有较小的内存占用,因为它们不需要运行在 JVM 上。

  3. 不依赖于 JVM: 本机应用程序可以独立运行,无需事先安装 Java 运行时环境。这使得它们更容易部署和分发。

  4. AOT 编译: GraalVM 使用 AOT(Ahead-of-Time)编译技术,将应用程序代码编译成本机机器码,而不是在运行时进行即时编译。

使用 GraalVM 本机应用程序有助于改善 Java 应用程序的性能和资源利用效率,特别是在云原生和微服务架构中。然而,需要注意的是,并非所有的 Java 应用程序都适合使用 GraalVM 本机应用程序,因为某些应用程序可能依赖于动态特性或反射等功能,而这些在 AOT 编译中可能会带来挑战。

第一步:创建springboot项目,勾选GraalVM Native Support依赖

Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)_第1张图片

第二步:编写示例程序

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);
    }

}

项目结构如下

Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)_第2张图片

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
            
        
    


刷新的时候勾选native

Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)_第3张图片

第三步:安装GraalVM

官网:https://www.graalvm.org/downloads/#

Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)_第4张图片

选择java17,然后download,然后解压缩

Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)_第5张图片

配置一下环境变量:

Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)_第6张图片

然后回到idea,并运行打包。出现以下错误:

Error: Error compiling query code (in C:\Users\ADMINI~1\AppData\Local\Temp\SVM-16192823869583359649\WindowsDirectives.c). Compiler command ''D:\WindowsVSC\VC\Tools\MSVC\14.36.32532\bin\Hostx64\x64\cl.exe' /WX /W4 /wd4201 /wd4244 /wd4245 /wd4800 /wd4804 /wd4214 '/FeC:\Users\ADMINI~1\AppData\Local\Temp\SVM-16192823869583359649\WindowsDirectives.exe' 'C:\Users\ADMINI~1\AppData\Local\Temp\SVM-16192823869583359649\WindowsDirectives.c'' output included error: [WindowsDirectives.c, C:\Users\ADMINI~1\AppData\Local\Temp\SVM-16192823869583359649\WindowsDirectives.c(5): fatal error C1034: stdio.h:

Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)_第7张图片

这是未配置INCLUDE环境变量的原因。

Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)_第8张图片

先打开,你的vs studio的文件目录

Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)_第9张图片

然后找到你们的include:这个库

Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)_第10张图片

配置一下环境变量:

Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)_第11张图片

在配置一下lib库:

Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)_第12张图片

Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)_第13张图片

配置好了,再试一次,打包:

当然也会报错啦,我知道你很急但是你先别急。include的那块没有写完整。

Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)_第14张图片

知道了吧,真正的库是在D:\Windows Kits\10\Include\10.0.22000.0里面加上msvc里面的include

所以要重新设置一下INCLUDE环境变量。最好把下面的所有东西都放到那个环境变量里面

Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)_第15张图片

Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)_第16张图片

那lib包呢,肯定是要在修改一下的。

Lib包的真实目录:D:\Windows Kits\10\Lib\10.0.22000.0和msvc的都加入进去

Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)_第17张图片

同理最好把,那些目录都存到环境变量里面

Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)_第18张图片

最后在打包一下看看。应该没有问题

你可能感兴趣的:(springboot,spring,java,java17,javase,graalvm)