怎么用弹簧本机将SpringBoot程序转换为GraalVM

  介绍

这篇文章主要介绍了怎么用弹簧本机将SpringBoot程序转换为GraalVM,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。

春发布了一个新工具春天本地测试,用于将现有春天的引导应用程序(用Java或芬兰湾的科特林编写)转换为GraalVM本机映像。目标是在springnative上支持弹簧引导应用程序.GraalVM本机映像很小,经过优化,启动速度很快。然而,与JVM相比,折衷的办法是构建时间更长,运行时优化更少。

春本机与GraalVM团队合作,充当桥梁,确保GraalVM理解传统的SpringBoot代码.Oracle实验室的高级研究经理Vojin约万诺维奇在谈到他们与春天的合作时说:

与春天团队合作构建本机JVM生态系统是一件非常愉快的事情:他们深厚的技术知识和对社区敏感的触觉总能带来最好的解决方案。最新的春天本机版本及其在JVM生态系统中的大量使用为本机编译的广泛采用铺平了道路。

在后台,Maven和Gradle提供的提前(AOT)插件用于将春天引导应用程序转换为本机代码。这些插件为GraalVM不支持的所有弹簧元素(如反射和代理)生成GraalVM本机配置。生成的配置存储在reflect-config。json文件,例如,用@ service注释的每个类都在json文件中配置。

假设弹簧本机配置文件位于meta - inf/本机映像文件夹中,则可以发现它们。本机提示可用于配置SpringNative尚不支持的元素,例如MySQL驱动程序配置。

创建新项目时,弹簧初始化器中提供了春天本机依赖项。

怎么用弹簧本机将SpringBoot程序转换为GraalVM

一些依赖项,比如springdatajpa,需要额外的配置来支持GraalVM.Spring团队通过插件提供这些额外的配置,例如,在Intitializr中添加了弹簧数据JPA依赖项之后,两个额外的Maven插件弹簧aot Maven插件和hibernate增强Maven插件(包括它们的配置)被添加到砰的一声。xml文件。

此时并非所有依赖项都受弹簧原生支持。如果初始值设定项生成春天的项目中包含不支持的依赖项,则帮助。md文件将列出它。

怎么用弹簧本机将SpringBoot程序转换为GraalVM

与任何其他春天引导应用程序一样,初始化会自动创建适当的入口点类来运行应用程序:

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

接下来,提供一个REST控制器来测试应用程序:

@ controller   public  class  NativeEndpoint  {      ,,,@GetMapping (“/native")   ,,,public  String  nativeCall (), {   ,,,,,,,return “Native";   ,,,}   }

除了标准的SpringBoot依赖项之外,初始化器还为SpringNative支持添加了一个新的依赖项:

& lt; dependency>   & lt; groupId> org.springframework.experimental   & lt; artifactId> spring-native   & lt; version> $ {spring-native.version} & lt;/version>   & lt;/dependency>

弹簧引导maven插件接收了一些额外的配置来生成本机映像:

& lt; plugin>   & lt; groupId> org.springframework.boot   & lt; artifactId> spring-boot-maven-plugin   & lt; configuration>   & lt; image>   & lt; builder> paketobuildpacks/建筑商:tiny   & lt; env>   & lt; BP_NATIVE_IMAGE> true   & lt;/env>   & lt;/image>   & lt;/configuration>   & lt;/plugin>

Maven可用于通过提前编译生成本机映像。生成的可执行文件包括所有必要的类和来自JDK的静态链接本机代码。底层VM被用作运行时系统,而不是普通的javavm。

,美元。/mvnw  spring-boot:构建过程

在编译和优化代码时,构建映像需要一些时间。此步骤在码头工人映像中执行,需要相当多的内存。如果发生以下错误,应增加码头工人的内存设置:

Exception 拷贝thread “native-image  pid  watcher", java.lang.OutOfMemoryError:,   ,,GC  overhead  limit 超过

执行上述Maven命令的输出显示了结果码头工人映像,其中包含GraalVM本机映像:

Successfully  built  image  & # 39; docker.io/图书馆/本地:0.0.1-SNAPSHOT& # 39;

怎么用弹簧本机将SpringBoot程序转换为GraalVM