重学SpringBoot3-SpringBoot可执行JAR的原因

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》
期待您的点赞👍收藏⭐评论✍

重学SpringBoot3-SpringBoot可执行JAR的原因

  • Spring Boot可执行JAR的结构
    • 打包运行
    • JAR 包内部结构
  • 工作原理
  • 优点
  • 总结

Spring Boot 的一个核心特性是它的可执行 JAR(通常称为“Fat JAR”或“Uber JAR”),这种 JAR 文件包含了应用程序所有的依赖库,使得应用可以通过简单的 java -jar 命令独立运行。这个特性极大地简化了部署流程,使得 Spring Boot 应用可以轻松地在各种环境中部署和运行,不再依赖特定的应用服务器。下面将介绍 Spring Boot 可执行 JAR 的工作原理和它是如何实现独立运行的。

Spring Boot可执行JAR的结构

Spring Boot 的可执行 JAR 不同于传统的 JAR 文件。传统的 JAR 文件通常只包含应用程序的类和资源文件,而所有的依赖库则需要以某种方式(如放在一个共享的类路径中)单独提供。相比之下,Spring Boot 的可执行 JAR 包含了应用程序及其所有依赖的库,还包括一个嵌入式的 Servlet 容器(如 Tomcat、Jetty 或 Undertow),以及一段特殊的启动引导代码。

打包运行

打包

命令行中输入 java -jar xxx.jar 即可运行 jar 包。

运行jar

JAR 包内部结构

内部结构

一个 Spring Boot 可执行 JAR 的内部结构大致如下:

  • META-INF/:包含了 MANIFEST.MF 等元数据文件,MANIFEST.MF 中指定了主启动类(Main-Class)和类路径(Class-path)。
    • META-INF路径
    • pom文件
  • BOOT-INF/classes/:包含了应用程序的编译后的类文件。
    • 编译后的类文件和配置文件
  • BOOT-INF/lib/:包含了应用所有依赖的第三方库。
    • 依赖的库
  • org/:包含了 Spring Boot 的启动器类。
    • 启动类

工作原理

Spring Boot 可执行 JAR 的核心是它的启动器(Launcher)。当我们执行 java -jar 命令运行 Spring Boot 应用时,JVM 实际上是加载并执行 JAR 文件中指定的启动器类。启动器类的作用包括:

  1. 设置类加载器:启动器会创建一个自定义的类加载器来加载 BOOT-INF/classes/BOOT-INF/lib/ 中的类和库。这确保了应用程序能够访问到其依赖的所有库,即使这些库并不在 JVM 的默认类路径中。
  2. 启动嵌入式Servlet容器:启动器初始化并启动嵌入式的 Servlet 容器,比如 Tomcat。这个过程中,它会将应用程序部署到容器中。
  3. 启动Spring应用上下文:最后,启动器会启动 Spring 应用上下文,完成应用程序的初始化和 Bean 的装配过程。

优点

Spring Boot 的可执行 JAR 模式带来了多个优点:

  1. 简化部署:由于应用程序和它的所有依赖都包含在一个 JAR 文件中,部署应用变得非常简单。只需将 JAR 文件传输到服务器上,然后执行 java -jar 命令即可启动应用。
  2. 独立运行:应用不再依赖外部的 Servlet 容器或应用服务器。这减少了环境差异带来的问题,提高了应用的可移植性。
  3. 快速迭代:开发过程中,可以快速打包并运行应用,加速开发和测试流程。

总结

Spring Boot 的可执行 JAR 为 Java 应用的部署和运行提供了一种简单高效的方式。通过将应用程序和其所有依赖打包到一个独立的JAR文件中,并利用启动器动态加载这些依赖,Spring Boot 应用可以轻松地在任何提供了 Java 运行时环境的系统上运行。这种模式不仅优化了部署流程,还为应用的开发、测试和生产部署提供了极大的便利。随着微服务和云原生应用的兴起,Spring Boot 的这一特性无疑提供了巨大的价值。

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

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

相关文章

stm32之GPIO寄存器

文章目录 1 背景2 GPIO寄存器的类型2.1 端口配置寄存器2.2 设置/清除寄存器和位清除寄存器 3 总结 1 背景 C51单片机在进行数据的输入输出时,是直接操作与外部引脚关联的内部寄存器,例如,当设置P2_1为0时,就是将外部引脚的P21引脚…

Composer常见错误解决指南 ️

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

基于java疫情防控系统

疫情防控系统 伴随着新年的喜悦,2020年春节之际一场新冠疫情席卷了全球,但是在中国领导人的英明领导之下我国的疫情很快得到了控制,但是因为欧美等国家对疫情的不够重视,仍然有很多的境外疫情携带者会出入我国,为了能…

语句数据库查询有数据,放在帆软预览没数据

问题描述: 要展示的数据,写的sql放在帆软里面预览没数据,然后将语句预览丢在数据库里执行有数据。 问题解决: 1. 首先你要确保两个用的是一个数据库,如果在生产环境中,一般是会有多个数据库,所以你要确保你…

Spring boot 发送文本邮件 和 html模板邮件

Spring boot 发送文本邮件 和 html模板邮件 提示:这里使用 spring-boot-starter-mail 发送文本邮件 和 html模板邮件 文章目录 Spring boot 发送文本邮件 和 html模板邮件一、开启QQ邮箱里的POP3/SMTP服务①:开启步骤 二、简单配置①:引入依赖…

「JavaSE」Lambda表达式

🎇个人主页:Ice_Sugar_7 🎇所属专栏:快来卷Java啦 🎇欢迎点赞收藏加关注哦! Lambda表达式 🍉简介🍉函数式接口🍌注解 🍉语法🍉Lambda表达式的基本…

如何使用Java语言发票查验接口实现发票真伪查验、票据ocr

随着时代潮流的发展,企业也在寻找更加便捷、高效的办公模式,尤其是针对财务工作人员而言,繁琐的发票录入、查验工作占据了财务人员的大部分时间。对此,翔云提供了发票识别接口、发票查验接口,那么企业应当如何将这些接…

第二证券|沪指震荡涨0.49%,石油、有色等板块拉升

29日早盘,沪指盘中强势上扬,深成指、创业板指小幅走低,科创50指数跌超1%。 到午间收盘,沪指涨0.49%报3025.56点,深成指跌0.22%,创业板指微跌0.07%,科创50指数跌1.34%;两市算计成交5…

SAMRTFORMS 转换PDF 发送邮件

最终成果: *&---------------------------------------------------------------------**& Report ZLC_FIND_EXIT*&---------------------------------------------------------------------**&根据T-CODE / 程序名查询出口、BADI增强*&-------…

【LeetCode】LeetCode 547. 省份数量(Java版 什么是并查集)

📝个人主页:哈__ 期待您的关注 一、题目描述 有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。 省份 是一组直…

位操作符

简介: &,|,^,~都是常见的位操作符,操作对象是二进制数,运算时须将原码转换成补码(符号位为0,即正数时,补码与原码一致,不需要再转换),位数不一致时&#…

ros2相关代码记录

1.ros2概述 ROS2(Robot Operating System 2)是一个用于机器人应用程序的开源软件框架。它是ROS(Robot Operating System)的下一代版本,旨在改进和扩展原始ROS的特性,以适应更广泛的机器人应用场景和需求。…

HarmonyOS入门--配置环境 + IDE汉化

文章目录 下载安装DevEco Studio配置环境先认识DevEco Studio界面工程目录工程级目录模块级目录 app.json5module.json5main_pages.json通知栏预览区 运行模拟器IED汉化 下载安装DevEco Studio 去官网下载DevEco Studio完了安装 配置环境 打开已安装的DevEco Studio快捷方式…

【机器学习】数据探索(Data Exploration)---数据质量和数据特征分析

一、引言 在机器学习项目中,数据探索是至关重要的一步。它不仅是模型构建的基础,还是确保模型性能稳定、预测准确的关键。数据探索的过程中,数据质量和数据特征分析占据了核心地位。数据质量直接关系到模型能否从数据中提取有效信息&#xff…

Day24:私信列表、私信详情、发送私信

测试用户:用户名aaa 密码aaa 查询当前用户的会话列表;每个会话只显示一条最新的私信;支持分页显示。 首先看下表结构: conversation_id: 用from_id和to_id拼接,小的放前面去(因为两个人的对话应该在一个会…

Linux:详解TCP报头类型

文章目录 温习序号的意义序号和确认序号报文的类型 TCP报头类型详解ACK: 确认号是否有效SYN: 请求建立连接; 我们把携带SYN标识的称为同步报文段FIN: 通知对方, 本端要关闭了PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走RST: 对方要求重新建立连接; 我们把携带RST标识的称…

【学习】软件企业何时会选择第三方软件测试机构

近年来,随着软件行业的迅猛发展,软件企业对软件测试的需求也越来越大。为了保证软件的质量和稳定性,许多企业选择寻找第三方软件测试机构来进行软件测试。第三方软件测试机构是独立于软开发企业的专业机构,主要从事软件测试和质量…

【SpringBoot从入门到精通】02_SpringBoot快速上手

二、SpringBoot快速上手 环境准备: Java8及以上 Maven3.5 https://docs.spring.io/spring-boot/docs/2.7.14/reference/html/getting-started.html#getting-started SpringBoot 2.x 最新版 开发工具: IDEA 2022 2.1 开发第一个SpringBoot应用程序 …

什么是土壤墒情检测站?它在农业生产中有什么作用?

土壤墒情检测站是一种专门用于监测土壤水分状况和土壤水力性质的设备。它由多个传感器和数据采集单元组成,能够实时监测土壤中的水分含量、土壤温度等参数,并收集和记录相关的数据,提供土壤墒情(即土壤水分状态)的详细…

|行业洞察·趋势报告|《2024旅游度假市场简析报告-17页》

报告的主要内容解读: 居民收入提高推动旅游业发展:报告指出,随着人均GDP的提升,居民的消费能力增强,旅游需求从传统的观光游向休闲、度假游转变,国内人均旅游消费持续增加。 政府政策促进旅游市场复苏&…