这篇文章主要介绍了怎么用弹簧本机将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驱动程序配置。
创建新项目时,弹簧初始化器中提供了春天本机依赖项。
一些依赖项,比如springdatajpa,需要额外的配置来支持GraalVM.Spring团队通过插件提供这些额外的配置,例如,在Intitializr中添加了弹簧数据JPA依赖项之后,两个额外的Maven插件弹簧aot Maven插件和hibernate增强Maven插件(包括它们的配置)被添加到砰的一声。xml文件。
此时并非所有依赖项都受弹簧原生支持。如果初始值设定项生成春天的项目中包含不支持的依赖项,则帮助。md文件将列出它。
与任何其他春天引导应用程序一样,初始化会自动创建适当的入口点类来运行应用程序:
@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