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

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应用

云原生时代容器先行&#xff0c;为了更好的拥抱云原生&#xff0c;spring boot3之后&#xff0c;推出了graalvm编译boot项目&#xff0c;利用jvm的AOT&#xff08; Ahead Of Time &#xff09;运行前编译技术&#xff0c;可以将javay源码直接构建成机器码二进制的文件&#xff…...

代码随想录Day58

392.判断子序列 题目&#xff1a;392. 判断子序列 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;定义重合数记录s与t的比对情况&#xff0c;挨个取出t的字符&#xff0c;与s的字符进行比较&#xff0c;如果相同&#xff0c;重合数就加1&#xff0c;跳到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作为客户端&#xff0c;pc2&#xff0c;以及一台虚拟机作为服务端。 pc1,pc2(客户端&#xff09;: 虚拟机&#xff08;服务端)&#xff1a; 客户端 原理&#xff1a;客户端通过发送广播消息信息到ip:255.255.255.255(QHostAddress::Broadcast),局域网…...

PyTorch 统计属性-Tensor基本操作

最小 min, 最大 max, 均值 mean&#xff0c;累加 sum&#xff0c;累乘 prod … >>> a torch.arange(0,8).view(2,4).float() >>> a tensor([[0., 1., 2., 3.],[4., 5., 6., 7.]])>>> a.min() ## 最小值&#xff1a;tensor(0.) >>> a.ma…...

波拉西亚战记加速器 台服波拉西亚战记免费加速器

波拉西亚战记是一款新上线的MMORPG游戏&#xff0c;游戏内我们有多个角色职业可以选择&#xff0c;可以体验不同的战斗流派玩法&#xff0c;开放式的地图设计&#xff0c;玩家可以自由的进行探索冒险&#xff0c;寻找各种物资。各种随机事件可以触发&#xff0c;让玩家的冒险过…...

Mocha + Chai 测试环境配置,支持 ES6 语法

下面是一个完整的 Mocha Chai 测试环境配置&#xff0c;支持 ES6 语法。我们将使用 Babel 来转译 ES6 代码。 步骤一&#xff1a;初始化项目 首先&#xff0c;在项目目录中运行以下命令来初始化一个新的 Node.js 项目&#xff1a; npm init -y步骤二&#xff1a;安装必要的…...

华为网络设备攻击防范

畸形报文攻击防范 攻击行为 畸形报文攻击是通过向交换机发送有缺陷的IP报文&#xff0c;使得交换机在处理这样的IP包时会出现崩溃&#xff0c;给交换机带来损失。 畸形报文攻击主要有如下几种&#xff1a; 没有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&#xff1a;RDD对象数据输入 4.1 RDD对象概念&#xff1a;PySpark支持多种数据的输入&#xff0c;完成后会返回RDD类的对…...

《阅读的方法》读后感——超越期待的收获

当我翻开这本书的扉页时&#xff0c;未曾料到它会给我带来如此深远的启示和收获。依照推荐序言中的指引&#xff0c;我随意翻阅、精心选读&#xff0c;每一次都如同打开一扇新的窗户&#xff0c;让我窥见不同领域的智慧和美好。 等地铁时、临睡前随便读点什么&#xff0c;有什么…...

算法训练营第五十八天 | LeetCode 392 判断子序列、卡码网模拟美团笔试第一、二、三题(300/500有待提高)

卡码网图论更新了可以去看看&#xff0c;模拟笔试第四题就是深搜/广搜还不太会 LeetCode 392 判断子序列 其实就是最长公共子序列翻版 代码如下&#xff1a; class Solution {public boolean isSubsequence(String s, String t) {int[][] dp new int[s.length() 1][t.lengt…...

Sa-Token鉴权与网关服务实现

纠错&#xff1a; 在上一部分里我完成了微服务框架的初步实现&#xff0c;但是先说一下之前有一个错误&#xff0c;就是依赖部分 上次的学习中我在总的父模块下引入了spring-boot-dependencies&#xff08;版本控制&#xff09;我以为在子模块下就不需要再引用了&#xff0c;…...

企事业单位安全生产月活动怎样向媒体投稿?

作为一名单位的信息宣传员,我肩负着将每一次重要活动的精彩瞬间转化为文字,向外界传递我们单位声音的重任。初入此行时,我满怀热情,坚信通过传统的方式——电子邮件投稿,能够有效地将我们的故事传播出去。然而,现实却给我上了生动的一课。 记得在筹备“安全生产月”活动的宣传时…...

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&#xff08;Transmission Control Protocol/Internet Protocol&#xff0c;传输控制协议/网际协议&#xff09;是指能够在多个不同…...

Javaweb避坑指北(持续更新)

内容较多可按CtrlF搜索 0.目录 1.获取插入数据后自增长主键的值 2.Controller中返回给ajax请求字符串/json会跳转到xxx.jsp 3.ajax请求获得的json无法解析 4.在Controller中使用ServletFileUpload获取的上传文件为null 5.莫名其妙报service和dao里方法的错误 6.ajax请求拿…...

Web前端知道:深入探索与无尽挑战

Web前端知道&#xff1a;深入探索与无尽挑战 Web前端&#xff0c;这个看似简单却实则深不可测的领域&#xff0c;一直以来都吸引着无数开发者投入其中。在这个充满未知与可能的世界里&#xff0c;我们既是探索者&#xff0c;也是挑战者。本文将从四个方面、五个方面、六个方面…...

QT调用vs2019生成的c++动态库

QT调用vs2019生成的c动态库 dll库的创建方法&#xff1a; VS2019创建c动态链接库dll与调用方法-CSDN博客 加减法示范&#xff1a; 头文件 // 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 DLL3_EXPORTS // 符号编…...

C语言TC中有⼏个画线函数?怎么使⽤?

一、问题 C语⾔中画线的函数好像不⽌ line( )⼀个&#xff0c;那么除了 line( ) &#xff0c;还有哪些画线函数&#xff1f;怎么使⽤&#xff1f; 二、解答 TC中有3种画线的函数&#xff0c;共语法格式如下。 void far line(int x0, int y0, int xl, int y1); void far linet…...

掌握WhoisAPI,提升域名管理的效率

在互联网时代&#xff0c;域名管理是网站运营中非常重要的一环。通过域名&#xff0c;我们能够轻松访问和识别不同的网站。然而&#xff0c;域名的注册和管理也是一项复杂的任务&#xff0c;特别是对于大规模拥有许多域名的企业来说。为了提升域名管理的效率&#xff0c;我们可…...

Docker与Docker-Compose详解

1、Docker是什么&#xff1f; 在计算机中&#xff0c;虚拟化(英语: Virtualization) 是一种资源管理技术&#xff0c;是将计算机的各种实体资源&#xff0c;如服务器、网络、内存及存储等&#xff0c;予以抽象、转换后呈现出来&#xff0c;打破实体结构间的不可切割的障碍&…...

微服务之熔断器

1、高并发带来的问题 在微服务架构中&#xff0c;我们将业务拆分成一个个的服务&#xff0c;服务与服务之间可以相互调用&#xff0c;但是由于网络原因 或者自身的原因&#xff0c;服务并不能保证服务的100%可用&#xff0c;如果单个服务出现问题&#xff0c;调用这个服务就会…...

【高校科研前沿】北京大学赵鹏军教授团队在Nature Communications发文:揭示城市人群移动的空间方向性

文章简介 论文名称&#xff1a;Unravelling the spatial directionality of urban mobility 第一作者及单位&#xff1a;赵鹏军&#xff08;教授|第一作者|北京大学&#xff09;&王浩&#xff08;博士生|共同一作|北京大学&#xff09;; 通讯作者及单位&#xff1a;赵鹏军…...

徐州存储服务器会应用在哪些场景?

企业的业务随着不断的发展&#xff0c;数据信息与重要文件也在不断激增&#xff0c;存储服务器也受到了各个领域的广泛运用&#xff0c;那徐州存储服务器会应用在哪些场景当中呢&#xff1f; 存储服务器能够存储大量的数据信息、图片和视频等内容&#xff0c;是专门为数据存储设…...

个人博客搭建

liupengs blogs 环境搭建 版本环境&#xff1a;hexo3.8.0 node12.17.0 https://www.cnblogs.com/fengxiongZz/p/7707219.html 搭建 https://www.cnblogs.com/fengxiongZz/p/7707568.html 进阶 https://www.cnblogs.com/chengxs/p/7496265.html https://www.cnbl…...

服务器数据库三级等保的一些修改步骤

服务器整改项: 1.服务器需要设置强制密码复杂度,要求密码包含3种以上字符,最低8位 [root@localhost ~]# vi /etc/pam.d/system-auth password requisite pam_pwquality.so try_first_pass local_users_only retry=5 minlen=9 lcredit=-1 dcredit=-1 ocrredit=-1 enforrce_fo…...

Python私教张大鹏 Vue3整合AntDesignVue之DatePicker 日期选择框

案例&#xff1a;选择日期 <script setup> import {ref} from "vue";const date ref(null) </script> <template><div class"p-8 bg-indigo-50 text-center"><a-date-picker v-model:value"date"/><a-divide…...

springboot+vue前后端分离项目中使用jwt实现登录认证

文章目录 一、后端代码1.响应工具类2.jwt工具类3.登录用户实体类4.登录接口5.测试接口6.过滤器7.启动类 二、前端代码1.登录页index 页面 三、效果展示 一、后端代码 1.响应工具类 package com.etime.util;import com.etime.vo.ResponseModel; import com.fasterxml.jackson.…...

leetcode hot100 之 编辑距离

给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符删除一个字符替换一个字符 输入&#xff1a;word1 “horse”, word2 “ros” 输出&#xff1a;3 解释&#xff1a…...

企业网站建设定位注意的问题/如何在网络上推广产品

畅通工程 Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submission(s) : 20 Accepted Submission(s) : 14 Problem Description省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通&#xff08;但不一定有直接的…...

商机创业网/关键词优化是怎么弄的

分桶表 分区提供一个隔离数据和优化查询的便利方式。不过&#xff0c;并非所有的数据集都可形成合理的分区。对于一张表或者分区&#xff0c;Hive 可以进一步组织成桶&#xff0c;也就是更为细粒度的数据范围划分。分桶是将数据集分解成更容易管理的若干部分的另一个技术。分区…...

石家庄做网站汉狮网络/2023年7月最新新闻摘抄

缺省情况下&#xff0c;应用程序使用缓冲池 IBMDEFAULTBP&#xff0c;它是在创建数据库时创建的。当 SYSCAT.BUFFERPOOLS 目录表中该缓冲池的 NPAGES 值为 -1 时&#xff0c;DB2 数据库配置参数 BUFFPAGE 控制着缓冲池的大小。否则会忽略 BUFFPAGE 参数&#xff0c;并且用 NPAG…...

个人备案网站有什么限制/西安seo推广

只要尽力&#xff0c;努力了&#xff0c;就算失败了&#xff0c;输了&#xff0c;也不要遗憾&#xff0c;也不会遗憾&#xff01;其实也算成功了&#xff01;你不努力&#xff0c;不尽力&#xff0c;失败了&#xff0c;输了&#xff0c;那你会遗憾&#xff0c;甚至是终身&#…...

外贸网站如何做推广/常用的seo查询工具

根据Lucas定理&#xff0c;等价于在$P$进制下每一位分别求组合数最后乘积模$P$。 因为答案为$0$的并不好算&#xff0c;所以可以考虑用$n1$减去其它所有的答案。 那么每一位的组合数都不能是$0$&#xff0c;那么这就保证了$k$的每一位都不大于$n$&#xff0c;所以无需考虑$k\le…...

优秀的网站/搜狗网站seo

正如我在学期开始的时候跟大家介绍的那样, 如果所有团队都做同样的事情, 那么分数就采用 1/n 的体系。 第一名得满分, 第二名得 1/2 的分数, 第三名得 1/3 的分数…大家都在一个地方写博客, 项目都是同样有趣, 所以我们采用 1/n 体系, 满分 20 分.第一组&#xff1a; Seven积…...