我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么用Spring Native将SpringBoot程序转换为GraalVM

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么用Spring Native将SpringBoot程序转换为GraalVM

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

Spring发布了一个新工具Spring Native Beta,用于将现有的Spring Boot应用程序(用Java或Kotlin编写)转换为GraalVM本机映像。目标是在springnative上支持Spring Boot应用程序。GraalVM本机映像很小,经过优化,启动速度很快。然而,与JVM相比,折衷的办法是构建时间更长,运行时优化更少。

Spring Native与GraalVM团队合作,充当桥梁,确保GraalVM理解传统的SpringBoot代码。Oracle实验室的高级研究经理Vojin Jovanovic在谈到他们与Spring的合作时说:

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

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

假设Spring本机配置文件位于META-INF/Native-image文件夹中,则可以发现它们。本机提示可用于配置SpringNative尚不支持的元素,例如MySQL驱动程序配置。

创建新项目时,Spring Initializer中提供了Spring本机依赖项。

怎么用Spring Native将SpringBoot程序转换为GraalVM

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

此时并非所有依赖项都受Spring Native支持。如果initializer生成的Spring项目中包含不支持的依赖项,则HELP.md 文件将列出它。

怎么用Spring Native将SpringBoot程序转换为GraalVM

与任何其他Spring Boot应用程序一样,Initializer会自动创建适当的入口点类来运行应用程序:

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

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

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

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

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

spring boot maven插件接收了一些额外的配置来生成本机映像:

<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><image><builder>paketobuildpacks/builder:tiny</builder><env><BP_NATIVE_IMAGE>true</BP_NATIVE_IMAGE></env></image></configuration></plugin>

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

$ ./mvnw spring-boot:build-image

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

Exception in thread "native-image pid watcher" java.lang.OutOfMemoryError:    GC overhead limit exceeded

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

Successfully built image 'docker.io/library/native:0.0.1-SNAPSHOT'

生成的映像约为82 MB,包含运行应用程序的所有内容:

$ docker imagesnative  0.0.1-SNAPSHOT ... 81.9MB

Docker容器在端口8080上启动:

$ docker run -p 8080:8080 native:0.0.1-SNAPSHOT

启动容器后,应用程序几乎可以立即进行测试:

$ curl localhost:8080/native --silentNative

感谢你能够认真阅读完这篇文章,希望小编分享的“怎么用Spring Native将SpringBoot程序转换为GraalVM”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么用Spring Native将SpringBoot程序转换为GraalVM

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么用Spring Native将SpringBoot程序转换为GraalVM

这篇文章主要介绍了怎么用Spring Native将SpringBoot程序转换为GraalVM,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Spring发布了一个新工具Sp
2023-06-14

怎么使用PHP将SVG转换为JPEG

本篇内容主要讲解“怎么使用PHP将SVG转换为JPEG”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用PHP将SVG转换为JPEG”吧!为什么要将SVG转换为JPEGSVG图像是可缩放的,
2023-07-05

使用PyInstaller将Python程序文件转换为可执行程序文件

Windows下采用PyInstall将py文件转换成exe可执行文件 好不容易写完的py文件,想做成exe文件,最开始选择用py2exe,结果生成的exe遇到两个问题, 1. py程序里print 的信息,cmd中执行tool后并没有显示
2022-06-04

怎么用python包pdfkit将HTML转换为PDF

本篇内容介绍了“怎么用python包pdfkit将HTML转换为PDF”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!python包-pdfk
2023-06-30

怎么用php将所有编码转换为utf8

这篇文章主要介绍“怎么用php将所有编码转换为utf8”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么用php将所有编码转换为utf8”文章能帮助大家解决问题。一、什么是编码转换?编码转换是把一个
2023-07-05

怎么用PHP将字符串转换为小写

这篇文章主要介绍了怎么用PHP将字符串转换为小写的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用PHP将字符串转换为小写文章都会有所收获,下面我们一起来看看吧。strtolower()函数strtolowe
2023-07-05

使用JAVA怎么将PDF转换为HTML文档

使用JAVA怎么将PDF转换为HTML文档?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。引入Maven依赖