SpringBoot3.0正式发布,我来尝尝鲜

news/2024/4/25 11:36:24/文章来源:https://blog.csdn.net/BASK2311/article/details/128109813

GraalVM 版本:graalvm-ce-java17-22.3.0

SpringBoot3.0 中最重要的特性就是对 GraalVM 的支持,从而达到更快的启动速度,有两种使用方式。

利用 GraalVM 构建可执行文件

因为需要利用 GraalVM 来打包可执行文件,所以需要你的机器上安装了 GraalVM。

新建一个 SpringBoot 3.0 的 Maven 工程,引入 parent、starter 依赖、以及两个重要的插件:

<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></plugin></plugins>
</build>
复制代码

然后执行:

mvn -Pnative clean native:compile
复制代码

需要花费一些时间...

执行完能看到 BUILD SUCCESS: 

然后进入 target,就能看到一个 exe 文件: 

我们可以直接运行该 exe 来启动我们的 SpringBoot 应用: 

这样,我们就可以把这个可执行文件发送给另外的 windows 机器了,并且对方机器都不需要安装 JDK 就能运行我们的 SpringBoot 程序(亲自测过,确实能直接运行)。

不过大家应该发现了问题,在 windows 上编译出来的是 exe 文件,它是不能在 linux 上运行的,那么怎么办呢?

利用 Buildpacks 构建可执行文件 Docker 镜像

我们可以直接把 SpringBoot 应用对应的本地可执行文件构建为一个 Docker 镜像,这样就能跨操作系统运行了。

Buildpacks,类似 Dockerfile 的镜像构建技术

注意要安装 docker,并启动 docker

注意这种方式并不要求你机器上安装了 GraalVM,会由 SpringBoot 插件利用/paketo-buildpacks/native-image 来生成本地可执行文件,然后打入到容器中

Docker 镜像名字中不能有大写字母,我们可以配置镜像的名字:

<properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring-boot.build-image.imageName>springboot3demo</spring-boot.build-image.imageName>
</properties>
复制代码

然后执行:

mvn -Pnative spring-boot:build-image
复制代码

来生成 Docker 镜像。

执行完之后,就能看到 docker 镜像了: 

然后就可以运行容器了:

docker run --rm -p 8080:8080 springboot3demo
复制代码

顺便记录一下相关教程:

  1. docs.spring.io/spring-boot…
  2. www.graalvm.org/22.2/refere…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_39070.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Casein-PEG-Indocyanine green 络蛋白-聚乙二醇-吲哚菁绿 Casein-ICG

产品名称&#xff1a;络蛋白-聚乙二醇-吲哚菁绿 英文名称&#xff1a;Casein-PEG-Indocyanine green 质量控制&#xff1a;95% 原料分散系数PDI&#xff1a;≤1.05 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 用 途&#xff1a;仅供科研实验使用&#xff0c;…

Ansible 企业级自动化运维实战

一、Ansible 简介 如果Ansible不采用0mq(ZeroMQ),在操作1000个以下的节点性能还可以,如果操作1000个以上的节点,性能就很差。 目前来说Ansible支持local,ssh,0mq,Ansible用ssh来管理被管理主机是最常见的方法。 saltstack简称salt,默认采用0mq(ZeroMQ),支持数万…

TaWRKY19/61/82激活糖转运蛋白TaSTP3从而增强小麦条锈病敏感性

文章信息 题目&#xff1a;Sugar transporter TaSTP3 activation by TaWRKY19/61/82 enhances stripe rust susceptibility in wheat 刊名&#xff1a;New Phytologist 作者&#xff1a;Baoyu Huai&#xff0c;Zhensheng Kang,Jie Liu et al. 单位&#xff1a;Northwest A&…

麒麟信安携手河南IT联盟召开 《麒麟信安信创应用解决方案》线上分享会

在党政及金融、交通、能源等重要行业的信创应用步伐逐步加快的背景下&#xff0c;各行业均面临着不同程度的国产化落地难题。11月29日下午&#xff0c;麒麟信安与河南省信息协会IT产业分会&#xff08;河南IT联盟&#xff09;携手召开《麒麟信安信创应用解决方案》线上分享会&a…

ARM汇编之乘法指令

ARM汇编之乘法指令前言 首先&#xff0c;请问大家几个小小问题&#xff0c;你清楚&#xff1a; 乘法指令有哪些种类呢&#xff1f;ARM乘法指令具体的使用场景又有哪些&#xff1f; 今天&#xff0c;我们来一起探索并回答这些问题。为了便于大家理解&#xff0c;以下是本文的…

基础知识java

1.浅克隆和深克隆&#xff1f;深克隆的方法 浅克隆&#xff1a;对象的引用变量只会拷贝地址&#xff0c;不会新建一个对象 深克隆&#xff1a;对象的引用变量也会新建一个对象 实现方式&#xff1a; 浅克隆&#xff1a;实现cloneable接口的clone方法 深克隆&#xff1a;实现Ser…

西门子精彩触摸屏SMART V3组态报警的具体方法示例

西门子精彩触摸屏SMART V3组态报警的具体方法示例 用户自定义报警分为离散量报警和模拟量报警。 离散量报警:离散量对应于二进制数的1位,离散量的两种相反状态可以用1位二进制数的0、1状态来表示。例如:电动机的交流接触器的接通和断开、各种故障信号的出现和消失,都可以用…

flask入门教程之请求与响应

Flask是一个轻量级的web开发框架&#xff0c;依赖jinja2和Werkzeug WSGI服务的一个微型框架。 官方文档&#xff1a;https://flask.palletsprojects.com/en/2.0.x/ 中文文档&#xff1a;http://docs.jinkan.org/docs/flask/ 中文文档的版本会比较低&#xff0c;如果英语OK的话&…

22年-自研-面试题

目录背景题目Activiti回退功能条件分支功能&#xff0c;并行网关、包含网关有没有用到流程流转中&#xff0c;需知会其他人&#xff0c;这些人需同意/做处理&#xff08;有点流程的感觉&#xff09;&#xff0c;最后所有的意见都要汇总。你的实现思路Redis哪些数据结构&#xf…

【毕业设计】15-基于单片机的交通灯系统设计(原理图+仿真+论文)

【毕业设计】15-基于单片机的交通灯系统设计&#xff08;原理图、仿真、源代码工程答辩论文答辩PPT&#xff09; 文章目录【毕业设计】15-基于单片机的交通灯系统设计&#xff08;原理图、仿真、源代码工程答辩论文答辩PPT&#xff09;任务书设计说明书摘要设计框架架构设计说明…

【Rust日报】2022-11-29 Wirefish:基于 Tauri 的跨平台数据包嗅探器

Wirefish&#xff1a;基于 Tauri 的跨平台数据包嗅探器作者 stefanodevenuto 通过 Rust Tauri 实现&#xff0c;构建了一个类似 Wireshark 的跨平台数据包嗅探器。这个应用离生产阶段当然还很远&#xff0c;功能和页面上还有很多改善的空间&#xff0c;但是代码组织良好&#…

基于 Hive 的 Flutter 文档类型存储

基于 Hive 的 Flutter 文档类型存储 原文 https://medium.com/gytworkz/document-type-storage-in-flutter-using-hive-a18ea9659d84 前言 长久以来&#xff0c;我们一直使用共享首选项以键对格式在本地存储中存储数据&#xff0c;或者使用 SQLite 在 SQL 数据库中存储数据。 存…

【收藏】安科瑞企业微电网能效管理系统云平台演示账号

安科瑞 李亚俊 Acrel8757 1、AcrelCloud-1000变电所电力运维云平台 网址&#xff1a;https://acrelcloud.cn/ 演示账号&#xff1a;acrel 密码:123456 2、SCADA电力监控系统 网址&#xff1a;http://scada.acrel-eem.com/ 演示账号&#xff1a;acrel 密码:…

Android——使用ContentProvider共享数据

实验名称&#xff1a; 使用ContentProvider共享数据 实验目的&#xff1a; &#xff08;1&#xff09;能使用ContentProvider共享数据 &#xff08;2&#xff09;能使用内容观察者观察其他程序的数据变化 实验内容及原理&…

Kamiya丨Kamiya艾美捷小鼠血红蛋白ELISA说明书

Kamiya艾美捷小鼠血红蛋白ELISA预期用途&#xff1a; 小鼠血红蛋白ELISA是一种高灵敏度的双位点酶联免疫分析&#xff08;ELISA&#xff09;小鼠生物样品中血红蛋白的测定。仅供研究使用。 引言 血红蛋白&#xff08;HM&#xff09;是红细胞中的含铁氧转运蛋白。它吸收肺部的…

第10讲:Python列表对象查操作之通过切片获取列表中的元素

文章目录1.切片获取列表中的技术要点1.1切片获取列表中的概念总结1.2.切片的语法格式以及含义3.使用切片方法获取列表中元素3.1.定义一个原始列表列表3.2.当step步长为正数时切片的案例3.3.当step步长为负数时切片的案例3.4.使用负数索引作为切片范围4.将切片后的列表赋值给新的…

【LeetCode】No.103. Binary Tree Zigzag Level Order Traversal -- Java Version

题目链接&#xff1a;https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/ 1. 题目介绍&#xff08;Binary Tree Zigzag Level Order Traversal&#xff09; Given the root of a binary tree, return the zigzag level order traversal of its nodes’…

【学习笔记67】JavaScript中的闭包

一、认识函数的过程 1. 定义 在堆内存中开辟一段内存空间(XF001)把函数体的内容&#xff0c;完全百分百的照抄一份&#xff0c;存放在内存空间中(XF001)把内存空间的地址(XF001) 赋值给函数名2. 调用 根据函数名内存储的地址 (XF001) &#xff0c;去堆内存中找到对应函数会去…

R语言法国足球联赛球员多重对应分析(MCA)

数据集 fooball球员在场上的位置 数据来自国际足联的视频游戏FIFA 。游戏的特点是在游戏的各个方面评价每个球员的能力。等级是量化变量&#xff08;介于0和100之间&#xff09;&#xff0c;但我们将它们转换为分类变量。所有能力都被编码在4个等级&#xff1a;1.低/ 2.平均/ …

基于单片机技术的自动停车器的设计

目 录 摘 要 I Abstract II 1绪论 1 1.1课题研究背景 1 1.2国内外发展现状 1 1.3汽车自动停车器的研究目的 2 1.4课题研究的意义 2 2汽车停车器的功能设计 3 2.1汽车自动停车器的设计要求 3 2.2停车器的主要功能 3 3汽车自动停车器的硬件设计 5 3.1汽车自动停车器的硬件组成 5 …