当前位置: 首页 > news >正文

正规的饰品行业网站开发海南省建设人力资源网站

正规的饰品行业网站开发,海南省建设人力资源网站,google浏览器官网,系统开发者选项怎么关曾今Go语言里让我最艳羡的两个特性,一个是Goroutine,一个是native编译。 Java 21的虚线程实现了类似Goroutine的能力。Spring Boot 3.x开始提供了GraalVM的支持,现在Spring Boot也能打包成native文件了。 这一篇文章的目标是用一个案例讲解如…

曾今Go语言里让我最艳羡的两个特性,一个是Goroutine,一个是native编译。 Java 21的虚线程实现了类似Goroutine的能力。Spring Boot 3.x开始提供了GraalVM的支持,现在Spring Boot也能打包成native文件了。

这一篇文章的目标是用一个案例讲解如何将Spring Boot应用打包成native文件。整个过程主要是4步:

  1. 环境准备,讲解怎么安装GraalVM,安装本地编译器(gcc,cl)
  2. 测试工程,创建一个极简的Spring Boot应用,只有个Controller
  3. 编译打包,使用GraalVM、Maven将Spring Boot应用构建成可执行文件
  4. 测试运行,执行生成的可执行文件,访问Controller看是否正常

1. 环境准备

1. 前置条件

GraalVM依赖一些本地工具才能完成工作,这些工具包括:

  • C的头文件
  • glibc-devel
  • zlib
  • gcc
  • libstdc++-static

不同的操作系统,采用的安装方式不同,在Linux下可以使用包管理工具安装,比如yum、apt等

Linux

yum install gcc glibc-devel zlib-devel
apt-get install build-essential libz-dev zlib1g-dev

Windows

Windows可以通过安装Visual Studio完成依赖包安装

  1. 安装Visual Studio Build Tools
  2. 安装Visual Studio
2. 安装GraalVM

从官网选择Java版本、平台来下载,下载的zip包解压即安装,接下来只要设置环境变量JAVA_HOME、PATH即可

  • 设置GRAALVM_HOME为解压文件夹的根目录
  • 设置PATH为解压文件夹下的bin
3. 验证安装

通过执行native-image --help,确认我们安装成功

4. 参考资料

关于GraalVM的安装过程,可以参考官方的Get Started文档: Getting Started with GraalVM

2. 测试工程

1. 创建工程

使用mvn archetype:generate根据archetype maven-archetype-quickstart生成一个最简单的Java项目。

mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DgroupId=com.keyniu.dis -DartifactId=DiveInSpring -Dversion=0.1 -Dpackage=com.keyniu.dis -DinteractiveMode=false
2. 添加Spring Boot支持

修改pom.xml选择spring-boot-starter-parent作为parent,添加native-maven-plugin插件

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.keyniu.dis</groupId><artifactId>DiveInSpring</artifactId><version>0.1</version><name>DiveInSpring</name><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.0</version></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.graalvm.buildtools</groupId><artifactId>native-maven-plugin</artifactId></plugin></plugins></build></project>
3. 添加测试类

写一个最简单启动引导类,提供一个最简单的接口/hello,用于后续测试。

package com.keyniu.dis;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@SpringBootApplication
@RestController
public class DiveInMain {@GetMapping("/hello")public String hello(@RequestParam("name") String name) {return "hello," + name;}public static void main(String[] args) {SpringApplication.run(DiveInMain.class);}
}

3. 编译打包

1. 命令行窗口

为了让GraalVM能引用到VisualStudio的编译工具,我选择在x64 Native Tools窗口中运行接下来的命令。

在执行命令之前,确保你的环境变量设置正确,有添加GraalVM相关的配置

set GRAALVM_HOME=D:\Programs\GraalVM
set PATH=D:\Programs\GraalVM\bin;%PATH%
2. 进行native编译

在工程的根目录下执行mvn -Pnative native:compile,进行编译,最后会生成一个exe到工程的target目录下,输入如下

D:\Workspace\DiveInSpring>mvn -Pnative native:compile
...
Produced artifacts:D:\Workspace\DiveInSpring\target\DiveInSpring.exe (executable)

4. 测试运行

只需要在命令行里输入DiveInSpring.exe执行,可以看到只需要0.063s就能完成启动,这个项目如果通过java -jar启动的话大概耗时0.97s,还是快了很多的。打包后的exe文件大小是80M。

通过curl命令验证,接口正常提供服务

5. 使用建议

可以看到整个构建过程已经相当的顺畅,从可执行文件的大小,启动时间,内存占用都于明显的提升,应该说Spring + GraalVM离成熟应用已经不远了。由于GraalVM使用了Closed World Optimization,实际上这个可执行程序还是有一些限制的,主要是:

  1. Class初始化,有些初始化会在build期间完成,可以参考GraalVM文档: Class Initialization in Native Image
  2. 反射和动态代理,需要的编译期间完成
  3. 不支持JNI,如果有本地方法调用需要根据GraalVM提供的接口定制实现
  4. 执行时无法访问字节码,正常的debug、监控等用JVM TI实现的功能都不再可用

在SpringBoot中, 像profiles、 条件配置、 @Enable*等功能会受到影响,而其实这些特性正在被广泛使用,这些限制在完全解决之前实际使用还是有障碍的。关于可以执行文件的DEBUG、监控在GraalVM官网都已经有对应的文档,但是将它和公司内部的监控报警做集成还有一段路要走,已经看到黎明的曙光了。

A. 参考资料

  1. GraalVM构建Swing应用
  2. 使用GDB Debug由GraalVM构建的程序,Debug Native Executables with GDB
  3. 让可执行文件支持JFR,Build and Run Native Executables with JFR
  4. 手动创建Spring Boot工程
http://www.yayakq.cn/news/407747/

相关文章:

  • 做监控的有哪些网站樱桃电视剧西瓜视频在线观看
  • 东莞系统网站建设太原商城网站建设
  • 长春网站排名优化网络工程公司属于什么行业
  • 临邑县建设局网站WordPress的footer文件
  • 公司里面有人员增减要去哪个网站做登记广州免费建站找哪家
  • 宿迁网站制作公司值得关注的优秀设计作品
  • 高端网站案例欣赏河南省建设厅网站师林峰
  • 网站信息管理系统lnmp wordpress 数据库
  • 网站络网站免费在线观看
  • lol做直播网站广州免费技能培训班
  • 建设银行宁夏分行网站永兴县网站建设哪家好
  • 最专业的外贸网站建设图片制作视频的软件
  • 2017网站建设趋势中国网警中心官网
  • 网站怎么添加百度地图提高工作效率总结心得
  • 网站建设 管理wordpress描述
  • 网站开发时如何兼容建筑设计公司属于什么行业类别
  • 网站制作流程和方法网站开发到上线
  • 网站正在建设 下载wordpress 模板免费下载
  • 成都百度网站设计公司一般网站的服务器
  • 新乡网站推广360网站安全检测
  • 中企动力做网站行吗微擎 wordpress
  • 怎么注册个人网站php商城网站开发报告
  • 购物类网站首页效果图规划建网站步骤
  • sqlite 做网站数据库网店代运营哪里找
  • 质感企业网站导航用ps怎么做微信小程序第三方开发
  • 惠州3d网站建设全景网站竞价怎么做
  • 专业做网站设计哪家好个人做网站要缴税
  • 舆情信息网站柳州seo关键词优化
  • 网站建设备案策划书邢台做移动网站价格
  • 网站可以做被告嘛wordpress 仪表盘修改