首页 > 其他分享 >面试官:为什么SpringBoot的 jar 可以直接运行?

面试官:为什么SpringBoot的 jar 可以直接运行?

时间:2024-07-17 11:28:43浏览次数:18  
标签:文件 面试官 SpringBoot Spring JAR jar Boot 应用 打包

引言

  • 传统Java应用部署:需要将应用打包成WAR文件,部署到如Apache Tomcat、Jetty等Web容器中。
  • Spring Boot:改变了Java应用的开发体验,应用可以打包成可直接运行的jar文件,无需外部容器。

SpringBoot JAR包基础概念

  • Fat JAR(胖Jar)
    • 包含应用程序所需的全部依赖库和应用程序自身的类文件。
    • 自包含,只需分发一个文件即可部署应用。
    • 适合云端部署或无网络环境下的安装。

Spring Boot应用打包机制

  • Maven或Gradle插件:构建可执行的Fat JAR。
  • Maven示例
    • 使用spring-boot-maven-plugin插件进行打包。
    • 配置pom.xml中的build标签,指定mainClassrepackage目标。

Spring Boot应用打包机制详解

  • Fat JAR内容
    • META-INF/:包含MANIFEST.MF文件和其他元数据信息。
    • BOOT-INF/classes/:存放项目自身的类文件和资源文件。
    • BOOT-INF/lib/:放置所有依赖的jar包。

Spring Boot启动器与Loader机制

  • MANIFEST.MF文件:包含JAR包的基本信息和运行指令。
  • 启动器类加载器
    • org.springframework.boot.loader.JarLauncher:用于启动Spring Boot应用程序。
    • 读取MANIFEST.MF中的附加属性,如Start-ClassSpring-Boot-Lib

内嵌Web容器

  • 内嵌容器:如Apache Tomcat、Jetty、Undertow、Reactor Netty。
  • 优点
    • 简化部署,只需分发单一的JAR文件。
    • 加快启动速度,实现热重启。
    • 提高稳定性,减少环境差异导致的问题。

自动配置与类路径扫描

  • 自动配置
    • 读取resource/META-INF/spring.factories文件,列出所有可用的自动配置类。
    • 使用条件注解(如@ConditionalOnClass@ConditionalOnMissingBean)智能判断何时应用特定的配置。
  • @SpringBootApplication注解
    • 包含@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan
    • 启用自动配置,自动扫描和管理Spring组件。

总结

  • 直接运行原因
    1. Fat/Uber JAR:使用maven插件将项目及其所有依赖项打包成一个单一的jar文件。
    2. Manifest.MF:指定Main-Class属性,指向Spring Boot的启动类。
    3. 嵌入式Servlet容器:集成如Tomcat等嵌入式Web容器。
    4. 启动器类加载器:解压并加载内部依赖库,定位到实际的应用主类。
    5. 类路径扫描和自动配置:识别应用所依赖的服务和组件,并自动配置。

标签:文件,面试官,SpringBoot,Spring,JAR,jar,Boot,应用,打包
From: https://blog.csdn.net/modelsetget/article/details/140489491

相关文章

  • 基于ssm的springboot摄影约拍系统的设计实现(源码+LW+部署讲解)
    前言......
  • 基于web的人力资源管理系统 毕业设计 springboot+Vue+mysql
    介绍在当今企业管理中,人力资源的有效管理对于组织的发展至关重要。为了提高人力资源管理的效率和准确性,我们开发了这个基于Web的人力资源管理系统。该系统旨在为企业提供一个全面、便捷、高效的人力资源管理平台,满足企业对人力资源规划、招聘、培训、绩效管理等方面的需求。......
  • 基于springboot的社区智慧养老监护管理平台 毕业设计 springboot+Vue+mysql
    介绍随着人口老龄化的加剧,养老服务的需求日益增长,传统的养老模式已经难以满足现代社会的需求。为了提供更高效、便捷、个性化的养老服务,我们开发了这个基于SpringBoot的社区智慧养老监护管理平台。该平台旨在整合社区养老资源,实现对老年人的全面监护和管理,提升养老服务的质......
  • 基于springboot的教师工作量管理系统 毕业设计 springboot+Vue+mysql
    介绍在教育领域,对教师工作量的准确评估和有效管理对于保障教学质量、合理分配资源以及激励教师积极性具有至关重要的意义。然而,传统的教师工作量管理方式往往依赖于手工记录和繁琐的统计,容易出现误差、效率低下且缺乏透明度。本基于SpringBoot的教师工作量管理系统旨在为......
  • springboot家校共育平台-计算机毕业设计源码54235
    摘 要采用高效的SpringBoot框架,家校共育平台为家长与教师提供了便捷的沟通渠道。该平台整合了丰富的教育资源,实现了家校之间的即时信息互通,从而助力协同教育。为进一步方便用户访问和使用,平台与微信小程序进行了深度整合。家长和教师现在可以通过微信小程序轻松访问平台,无......
  • springboot二手书资源管理系统-计算机毕业设计源码26338
    目录1绪论1.1选题背景与意义1.2国内外研究现状1.3论文结构与章节安排2系统分析2.1可行性分析2.1.1技术可行性2.1.2经济可行性2.1.3社会可行性2.1.4法律可行性2.2系统流程分析2.2.1 数据流程2.2.2 业务流程2.3 系统功能分析2.3.1功能性分......
  • Springboot定义阿里云oss工具类
    Springboot定义阿里云oss工具类文章目录Springboot定义阿里云oss工具类1、定义OSS相关配置2、读取OSS配置3、生成OSS工具类对象4、定义使用工具类1、定义OSS相关配置首先,在application.yml文件中定义阿里云OSS的相关配置信息。这些配置包括endpoint、acces......
  • idea 创建springboot项目
    参考——https://blog.csdn.net/Alger_/article/details/128749131 ——————————需要联网创建 ————创建项目newproject——》Springinitializrnext springboot的版本与jdk版本有关2.x:jdk83.x:jdk17只选择web下的springweb——》create 项目需......
  • 基于SpringBoot+Uniapp的微信阅读小程序系统设计与实现(源码+lw+部署文档+讲解等)
    文章目录前言项目运行截图技术框架后端采用SpringBoot框架前端框架Vue可行性分析系统测试系统测试的目的系统功能测试数据库表设计代码参考数据库脚本为什么选择我?获取源码前言......
  • springboot+vue前后端分离项目-项目搭建13-树形表
    效果一、后端1.新建表category 2.新建entity,com/example/demo/entity/Category.java3.新建Mapper,com/example/demo/mapper/CategoryMapper.java 4.新建Controller,com/example/demo/controller/CategoryController.java主要代码逻辑如下,封装成List<Category>,前端结合......