graalvm编译springboot3 native应用
云原生时代容器先行,为了更好的拥抱云原生,spring boot3之后,推出了graalvm编译boot项目,利用jvm的AOT( Ahead Of Time )运行前编译技术,可以将javay源码直接构建成机器码二进制的文件,无需jdk静态编译为class字节码,运行时jre解释执行,这样就无需依赖java环境运行,部署到容器中可以直接启动运行。
AOT 内存占用低,启动速度快,可以无需 runtime 运行,直接将 runtime 静态链接至最终的程序中,但是无运行时性能加成,不能根据程序运行情况做进一步的优化。
下面通过实例demo测试一下这个新特性。
一、搭建SpringBoot3项目
使用gradle工具构建项目,项目结构如下:

1、build.gradle依赖配置
(1) boot3-app配置
plugins {id 'java'
}group 'org.example.cn'
version '1.0-SNAPSHOT'repositories {maven { url 'https://maven.aliyun.com/repository/central/' }maven { url 'https://maven.aliyun.com/repository/public/' }mavenCentral()
}
(2) graalvm-app配置
plugins {id 'java'id 'org.springframework.boot' version '3.2.6'id 'io.spring.dependency-management' version '1.1.5'id 'org.graalvm.buildtools.native' version '0.9.28'
}group 'org.example.cn'
version '1.0-SNAPSHOT'java {toolchain {languageVersion = JavaLanguageVersion.of(17)}
}repositories {maven { url 'https://maven.aliyun.com/repository/central/' }maven { url 'https://maven.aliyun.com/repository/public/' }mavenCentral()
}dependencies {implementation 'org.springframework.boot:spring-boot-starter-web'
}
2、测试接口
@RestController
@RequestMapping("/api")
public class RestApi {@GetMapping("/dataList")public List<String> getDataList(){String d = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));String[] arr = { "C" ,"C++","JAVA","GoLang","Rust","Python",d};return Arrays.stream(arr).toList();}
}
二、构建native镜像
在Linux环境分别安装gradle和graalvm-jdk
1、graalvm安装
官网下载地址:https://www.graalvm.org/downloads/
ssh远程到服务器下载
wget https://download.oracle.com/graalvm/17/latest/graalvm-jdk-17_linux-x64_bin.tar.gz
解压至指定目录,并配置环境变量
tar -zxvf graalvm-jdk-17_linux-x64_bin.tar.gz
测试环境
java -versiongu list


出现上面信息说明环境可行
2、gradle安装
官网地址:Gradle | Thank you for downloading Gradle!
wget https://services.gradle.org/distributions/gradle-8.8-bin.zip
下载好解压到指定目录(如果在线无法下载,离线下载上传至远程服务器),配置好环境变量,验证环境可用否
3、编译源码
这里为了便于演示,直接将win开发号的源码上传服务器,企业级应用可以使用jeknis自动化部署工具。 进入到项目根目录:
cd boot3-app
(1) 构建jar包
./gradlew clean && ./gradlew graalvm-app:build

构建成功如上图所示,进入到build目录既可以看到打好的jar
ls graalvm-app/build/libs/
我们的目标不是打jar包,提前做一次jar包构建,把所需的依赖提下载好,提高native构建的成功率。
(2)native构建
由于native构建需要依赖gcc编译器,提前检查gcc编译器知否安装,如果未安装,执行下面命令安装:
yum install -y gccyum install zlib-devel

native-image编译可执行文件
./gradlew graalvm-app:nativeBuild
构建时间比较长,大概耗时6分钟
构建好的可执行程序在build/native/nativeCompile
ls graalvm-app/build/native/nativeCompile/
![]()
graalvm-app就是通过native-image打包的最终可执行程序,控制台直接启动
./graalvm-app

验证服务可用性

相关文章:
graalvm编译springboot3 native应用
云原生时代容器先行,为了更好的拥抱云原生,spring boot3之后,推出了graalvm编译boot项目,利用jvm的AOT( Ahead Of Time )运行前编译技术,可以将javay源码直接构建成机器码二进制的文件ÿ…...
代码随想录Day58
392.判断子序列 题目:392. 判断子序列 - 力扣(LeetCode) 思路:定义重合数记录s与t的比对情况,挨个取出t的字符,与s的字符进行比较,如果相同,重合数就加1,跳到s的下一个字…...
Android Verified Boot (AVB) 与 dm-verity 之间的关系、相同点与差异点
标签: AVB; dm-verity ;Android Android Verified Boot (AVB) 与 dm-verity 之间的关系、相同点与差异点 概述 Android Verified Boot (AVB) 和 dm-verity 是 Android 操作系统中用于确保设备启动过程和运行时数据完整性的两个重要技术。尽管它们有着不同的实现和侧重点,…...
C++学习笔记“类和对象”:多态;
目录 4.7 多态 4.7.1 多态的基本概念 4.7.2 多态案例--计算器类 4.7.3 纯虚函数和抽象类 4.7.4 多态案例二 - 制作饮品 4.7.5 虚析构和纯虚析构 4.7.6 多态案例三-电脑组装 4.7 多态 4.7.1 多态的基本概念 多态是C面向对象三大特性之一 多态分为两类 静志多态: 函数…...
QT Udp广播实现设备发现
测试环境 本文选用pc1作为客户端,pc2,以及一台虚拟机作为服务端。 pc1,pc2(客户端): 虚拟机(服务端): 客户端 原理:客户端通过发送广播消息信息到ip:255.255.255.255(QHostAddress::Broadcast),局域网…...
PyTorch 统计属性-Tensor基本操作
最小 min, 最大 max, 均值 mean,累加 sum,累乘 prod … >>> a torch.arange(0,8).view(2,4).float() >>> a tensor([[0., 1., 2., 3.],[4., 5., 6., 7.]])>>> a.min() ## 最小值:tensor(0.) >>> a.ma…...
波拉西亚战记加速器 台服波拉西亚战记免费加速器
波拉西亚战记是一款新上线的MMORPG游戏,游戏内我们有多个角色职业可以选择,可以体验不同的战斗流派玩法,开放式的地图设计,玩家可以自由的进行探索冒险,寻找各种物资。各种随机事件可以触发,让玩家的冒险过…...
Mocha + Chai 测试环境配置,支持 ES6 语法
下面是一个完整的 Mocha Chai 测试环境配置,支持 ES6 语法。我们将使用 Babel 来转译 ES6 代码。 步骤一:初始化项目 首先,在项目目录中运行以下命令来初始化一个新的 Node.js 项目: npm init -y步骤二:安装必要的…...
华为网络设备攻击防范
畸形报文攻击防范 攻击行为 畸形报文攻击是通过向交换机发送有缺陷的IP报文,使得交换机在处理这样的IP包时会出现崩溃,给交换机带来损失。 畸形报文攻击主要有如下几种: 没有IP载荷的泛洪攻击 IGMP空报文攻击 LAND攻击 Smurf攻击 TCP标…...
RK3588开发笔记-100M网口自协商成1000M网口
目录 前言 一、问题描述 二、原理图连接 三、解决方法 总结 前言 在进行RK3588开发过程中,遇到一个令人困惑的问题:在使用RTL8211F-CG phy芯片出来的100M网口在自协商后连接速率变成了1000M。这篇博客将详细记录这个问题的产生、排查过程以及最终的解决方案,希望能对遇到…...
Python第二语言(十三、PySpark实战)
目录 1.开篇 2. PySpark介绍 3. PySpark基础准备 3.1 PySpark安装 3.2 掌握PySpark执行环境入口对象的构建 3.3 理解PySpark的编程模型 4. PySpark:RDD对象数据输入 4.1 RDD对象概念:PySpark支持多种数据的输入,完成后会返回RDD类的对…...
《阅读的方法》读后感——超越期待的收获
当我翻开这本书的扉页时,未曾料到它会给我带来如此深远的启示和收获。依照推荐序言中的指引,我随意翻阅、精心选读,每一次都如同打开一扇新的窗户,让我窥见不同领域的智慧和美好。 等地铁时、临睡前随便读点什么,有什么…...
算法训练营第五十八天 | LeetCode 392 判断子序列、卡码网模拟美团笔试第一、二、三题(300/500有待提高)
卡码网图论更新了可以去看看,模拟笔试第四题就是深搜/广搜还不太会 LeetCode 392 判断子序列 其实就是最长公共子序列翻版 代码如下: class Solution {public boolean isSubsequence(String s, String t) {int[][] dp new int[s.length() 1][t.lengt…...
Sa-Token鉴权与网关服务实现
纠错: 在上一部分里我完成了微服务框架的初步实现,但是先说一下之前有一个错误,就是依赖部分 上次的学习中我在总的父模块下引入了spring-boot-dependencies(版本控制)我以为在子模块下就不需要再引用了,…...
企事业单位安全生产月活动怎样向媒体投稿?
作为一名单位的信息宣传员,我肩负着将每一次重要活动的精彩瞬间转化为文字,向外界传递我们单位声音的重任。初入此行时,我满怀热情,坚信通过传统的方式——电子邮件投稿,能够有效地将我们的故事传播出去。然而,现实却给我上了生动的一课。 记得在筹备“安全生产月”活动的宣传时…...
MySQL8.0默认TCP端口介绍
1、本文内容 选择题TCP/IPMySQL 8.0 的默认TCP端口show variables查看总结 2、选择题 A、3306 B、33060 C、33062 D、33063 3、TCP/IP TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同…...
Javaweb避坑指北(持续更新)
内容较多可按CtrlF搜索 0.目录 1.获取插入数据后自增长主键的值 2.Controller中返回给ajax请求字符串/json会跳转到xxx.jsp 3.ajax请求获得的json无法解析 4.在Controller中使用ServletFileUpload获取的上传文件为null 5.莫名其妙报service和dao里方法的错误 6.ajax请求拿…...
Web前端知道:深入探索与无尽挑战
Web前端知道:深入探索与无尽挑战 Web前端,这个看似简单却实则深不可测的领域,一直以来都吸引着无数开发者投入其中。在这个充满未知与可能的世界里,我们既是探索者,也是挑战者。本文将从四个方面、五个方面、六个方面…...
QT调用vs2019生成的c++动态库
QT调用vs2019生成的c动态库 dll库的创建方法: VS2019创建c动态链接库dll与调用方法-CSDN博客 加减法示范: 头文件 // 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 DLL3_EXPORTS // 符号编…...
C语言TC中有⼏个画线函数?怎么使⽤?
一、问题 C语⾔中画线的函数好像不⽌ line( )⼀个,那么除了 line( ) ,还有哪些画线函数?怎么使⽤? 二、解答 TC中有3种画线的函数,共语法格式如下。 void far line(int x0, int y0, int xl, int y1); void far linet…...
【仅剩237个内测配额】ElevenLabs V3.2声纹微调API提前体验:支持跨语种音色迁移的5行代码实现方案
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs自定义声音训练概述 ElevenLabs 的 Custom Voice 功能允许开发者与内容创作者基于少量高质量语音样本,训练出具备独特音色、语调与情感表现力的专属 AI 声音。该能力面向专业场景…...
构建个人数字档案馆:用静态站点生成器永久保存思想印记
1. 项目概述:一个灵魂的数字化栖息地 最近在整理个人数字资产时,我常常感到一种无力感。十几年来,从博客、社交媒体到各种笔记应用,产生的文字、图片、链接散落在各处,像一座座孤岛。有些平台已经关闭,有些…...
从词嵌入到注意力衰减:一次大模型安全边界的逆向测绘实验
0. 这篇文章是关于什么的这是一份从底层代码出发,亲手搭建实验环境,尝试逆向测绘大模型安全边界的技术笔记。几天前,我在一篇分析Transformer安全机制的文章中提出过一个假设:大模型的安全审查,不是一套离散的、随机的…...
VSCode里Python解释器选错了?别慌,手把手教你切换和修复(附常见问题排查)
VSCode中Python解释器配置疑难全攻略:从基础到高阶排错 刚接触VSCode的Python开发者经常会遇到这样的场景:代码明明在终端运行正常,但在VSCode中却报错;或者安装了某个包却提示模块不存在。这些问题八成与解释器配置有关。作为一款…...
3分钟快速解决Windows与iPhone网络共享的终极方案
3分钟快速解决Windows与iPhone网络共享的终极方案 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://gitcode.com/gh_mirrors/ap/Apple-M…...
【Claude代码审查实战指南】:20年老炮亲授Python项目零误判率审查法
更多请点击: https://intelliparadigm.com 第一章:Claude代码审查实战指南的起源与核心理念 Claude代码审查实战指南诞生于开源协作日益深化、AI辅助开发成为工程标配的交叉节点。其核心理念并非替代人类审阅者,而是构建“人机协同的可信审查…...
KokonutUI:基于React的现代化UI组件库设计与实践
1. 项目概述:一个为现代Web应用而生的UI组件库如果你最近在寻找一个既现代又实用的React UI组件库,那么kokonutui这个名字可能已经出现在你的视野里了。它不是一个横空出世、试图颠覆一切的庞然大物,而更像是一个由一线开发者精心打磨的工具箱…...
蓝奏云直链解析实战指南:一站式自动化高速下载解决方案
蓝奏云直链解析实战指南:一站式自动化高速下载解决方案 【免费下载链接】LanzouAPI 蓝奏云直链,蓝奏api,蓝奏解析,蓝奏云解析API,蓝奏云带密码解析 项目地址: https://gitcode.com/gh_mirrors/la/LanzouAPI 还在…...
用STC89C52单片机+DHT11做个简易温湿度计(附完整代码和串口打印)
基于STC89C52与DHT11的智能温湿度监测系统开发实战 在创客教育和嵌入式开发入门领域,温湿度监测系统一直是最受欢迎的实践项目之一。这个看似简单的项目实际上融合了传感器技术、单片机编程和通信协议三大核心技能,是检验初学者嵌入式开发能力的绝佳试金…...
SDRPi平台OpenWifi实战:内核定制与驱动编译全流程解析
1. SDRPi与OpenWifi项目初探 第一次接触SDRPi平台时,我就被它的灵活性惊艳到了。这个基于树莓派架构的软件定义无线电开发板,配合OpenWifi开源项目,能实现从物理层到MAC层的完整WiFi协议栈开发。OpenWifi项目最大的特点是把FPGA和ARM处理器完…...
