GraalVM 构建 Spring Native 应用

准备工作

  • GraalVM 配置
    • 下载 GraalVM
    • 设置 JAVA_HOME
    • 设置 Path 将 GraalVM 放在最前面
    • *运行 gu install native-image (不需要,在编译过程中会自动下载)
  • Win 编辑工具
    • 下载 Visual Studio Build Tools 和 Windows SDK

原生编译不容易的,准备工作弄好,好几个G的空间没了

创建例子项目

新建一个 Spring Boot 项目,包含一些常规的依赖

不需要 GraalVM Native Support,这是构建镜像用的

添加一个/首页接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@SpringBootApplication
public class NativeExampleApplication {

public static void main(String[] args) {
SpringApplication.run(NativeExampleApplication.class, args);
}

@Configuration
public static class HomeIndex {
@Bean
public RouterFunction<ServerResponse> homeRoutes() {
return route()
.GET("/", serverRequest ->
ServerResponse.ok().bodyValue("Hello, native example!"))
.build();
}
}

}

运行项目,我们可以看到需要1.99s,访问localhost:8080返回Hello, native example!

原生构建

搜索并打开x64 Native Tools Command Prompt for VS 2022

在你的项目位置,运行.\mvnw.cmd -Pnative native:compile,耐心等待编译完成

1
2
3
4
5
6
7
8
9
10
11
Produced artifacts:
I:\Users\MrTT\Desktop\native-example\target\native-example.build_artifacts.txt (txt)
I:\Users\MrTT\Desktop\native-example\target\native-example.exe (executable)
========================================================================================================================
Finished generating 'native-example' in 2m 7s.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:27 min
[INFO] Finished at: 2023-03-28T09:28:42+08:00
[INFO] ------------------------------------------------------------------------

花费2m27s还行,native-example.exe有66mb,有点大,但毕竟不需要jre,也还行吧

运行测试

target下运行.\native-example.exe

0.19s启动,快了很多