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

SpringBoot从0-1集成Graalvm

✨重磅!盹猫的个人小站正式上线啦~诚邀各位技术大佬前来探秘!✨

这里有:

  • 硬核技术干货:编程技巧、开发经验、踩坑指南,带你解锁技术新姿势!
  • 趣味开发日常:代码背后的脑洞故事、工具测评,让技术圈不再枯燥~
  • 独家资源分享:开源项目、学习资料包,助你打怪升级快人一步!

👉 点击直达→ 盹猫猫的个人小站 👈
🌟 来逛逛吧,说不定能挖到你正在找的技术宝藏哦~

目录

⭐ 前言

🤔 什么是Graalvm?

⭐ 安装Grallvm

⬇️ 下载Grallvm

📄 配置Graalvm环境

🔢 打包顺序

⭕ 开发环境

⭐ 程序步骤

🔷 Pom依赖

🔷 添加测试代码

BootApplication.java

UserController.java

⭐ 打包步骤

🔷 打包为可执行文件

🔷 打包为Docker镜像

⭐ 总结


欢迎来到 盹猫(>^ω^<)的博客

本篇文章主要介绍了

[SpringBoot从0-1集成Graalvm]
❤博主广交技术好友,喜欢文章的可以关注一下❤

⭐ 前言

        原生开发是现在比较火的一个话题,程序员更倾向于将成果打包为一个可执行的文件直接运行(有时也会打包为Docker镜像),SpringBoot语言具有良好的编码风格,但由于其打成的jar包比较大,并且在进行Docker打包时还要考虑JRE的运行环境.

        为解决该问题,Oracle公司主导开发了Grallvm可以为Java提供统一运行环境,本篇文章就是记录如何将SpringBoot程序打包为可执行文件并封装为Docker镜像.

🤔 什么是Graalvm?

        GraalVM 是一个高性能的跨语言虚拟机和编译器平台,由 Oracle 主导开发,旨在为多种编程语言提供统一的运行时环境,并支持将应用程序提前编译(AOT)为原生可执行文件。

🫱 具有优势:

  •         启动速度快,打包为原生包后SpringBoot的启动速度在几毫秒.
  •         打包成Docker镜像后体积相较于需要使用JAR包的Docker运行环境体积缩减70%

⭐ 安装Grallvm

⬇️ 下载Grallvm

需要在Graalvm官网根据系统选择合适的版本进行下载,解压到对应的目录.

这里使用JDK21包.

📄 配置Graalvm环境

        配置GraalVM JDK与配置JDK环境的方式类似,这里我使用的是Linux系统(Deepin),需要在~/.bashrc文件内添加以下内容:

export GRAALVM_HOME=/home/seaua/环境配置/jdk
export JAVA_HOME=$GRAALVM_HOME
export PATH="$JAVA_HOME/bin:$PATH"

这里将配置系统变量JAVA_HOME,GRAALVM,PATH指向我们下载的GRAALVM JDK目录.

然后使用下述命令使环境变量生效:

source ~/.bashrc

🔢 打包顺序

打包为Jar包->编译为可执行文件->打包为Docker镜像

⭕ 开发环境

名称版本
JDK21 graalvm版本
maven3.9.11
SpringBoot3.5.6
docker26.1.4

⭐ 程序步骤

🔷 Pom依赖

        这里使用SpringBoot 3.5.6版本 ,编译版本和目标版本使用下载配置JDK21版本.

<?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.uav</groupId><artifactId>springboot-native</artifactId><version>1.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.5.6</version></parent><properties><maven.compiler.source>21</maven.compiler.source><maven.compiler.target>21</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>
</project>

按照打包顺序需要添加下面两个打包工具依赖:

native-maven-plugin: 用于将jar包打包为可执行包.
spring-boot-maven-plugin: 用于将SpringBoot程序打包为Jar包.

    <build><plugins><plugin><groupId>org.graalvm.buildtools</groupId><artifactId>native-maven-plugin</artifactId></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><mainClass>com.uav.BootApplication</mainClass></configuration></plugin></plugins></build>

🔷 添加测试代码

为Web程序添加一些测试代码,以确认打包程序的运行状态.

BootApplication.java

package com.uav;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class BootApplication {public static void main(String[] args) {SpringApplication.run(BootApplication.class, args);}
}

UserController.java

package com.uav;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserController {@RequestMapping("/users")public String getUsers() {return "This is a list of users";}
}

一个简单的GET请求/users路径并返回一个字符串.

⭐ 打包步骤

🔷 打包为可执行文件

首先在命令行中运行以下命令将SpringBoot程序打包为Jar包并同时编译生成可执行文件:

mvn -Pnative native:compile

这会在target目录内生成一个jar文件的同时生成一个编译后的可执行文件.

这里的springboot-native即为打包后的可执行文件(这里如果是Windows系统会生成.exe文件).

🔷 打包为Docker镜像

在项目根目录内编写一个Dockerfile用于打包镜像,内容如下:

FROM ubuntu:jammy
COPY target/springboot-native springboot-native
ENTRYPOINT ["/springboot-native"]

这里使用ubuntu镜像并将打包好的可执行文件复制到镜像内部,并设置为执行入口. 保存后通过以下命令进行打包:

docker build . -- tag my-app

打包完成后使用docker images 查看打包完成的镜像.

使用以下命令运行该docker镜像:

docker run -p 8080:8080  myapp

可以看到日志打印启动仅用了0.065秒,启动速度还是非常快的.

⭐ 总结

        使用Graalvm可以将程序编译为可执行文件,并且文件体积相对于(JAR包+JRE运行环境+Linux)环境的镜像体积是比较小的,更快的启动速度可以保证程序在后台更新时可以做到无感知的重启更新,在实际生产使用还是非常不错的.

如果内容对你有帮助,麻烦留一个赞👍和收藏⭐支持一下!


如果你对区块链内容感兴趣可以查看我的专栏:小试牛刀-区块链

感谢您的关注和收藏!!!!!!

http://www.dtcms.com/a/400132.html

相关文章:

  • 代理商加盟网站网站建设阿里云搭建个人网站
  • 网站建设哪家学校好网络营销有哪些岗位
  • 网站建设为什么学flash开个免费的网站多少钱
  • 上海网站开发建设找哪家网页升级跳转自动刷新
  • 大良网站建设网推渠道
  • 盐城网站开发如何什么 的提升自己的网站
  • 网站建设进度表 下载课程网站开发背景和意义
  • 合肥哪家做网站好都江堰seo
  • ArrayList重点APi
  • 度假村网站建设wordpress 登陆失败
  • 购物网站建设新闻无锡谁做网站好
  • 胶南网站建设价格网站申请内容吗
  • 用wordpress建的大部app优化网站建设
  • 一篇文章讲清楚常见的数据结构
  • 如何做二级域名子目录网站广州app搭建
  • 数据结构 之 【并查集】
  • 可视化小程序开发工具深圳网站优化排名公司
  • 网站建设带采集威海建设集团的网站是什么
  • 【愚公系列】《人工智能70年》038-计算机视觉大放异彩(计算机视觉未来)
  • 网站建设公司douyanet桂林北京网站建设
  • 开通域名后怎样建设网站苏州做网站哪家比较好
  • 考研408计算机网络第47题(2024年)
  • 什么网站可以找到防水工程做建站行业成为买方市场
  • 装修公司网站模板下载最优惠的网站优化
  • Nginx 配置指南:HTTPS 自签名、Location、Rewrite 与状态统计
  • chn域名网站百度知道登录入口
  • 网站做cpa推广引流苍南具城乡建设局网站
  • 工商网站官网入口做国际网站的流程
  • 广告网站素材青创网站首页
  • 02-基于FPGA和LTC2308的数字电压表设计-模数转换原理