springboot源码分析-jar启动

news/2025/2/16 0:29:29/

概述

Spring Boot 提供了 Maven 插件 spring-boot-maven-plugin,可以方便的将 Spring Boot 项目打成 jar 包或者 war 包。

SpringBoot 是如何通过jar包启动的

java -jar做了什么?看看官网怎么说

If the -jar option is specified, its argument is the name of the JAR file containing class and resource files for the application. The startup class must be indicated by the Main-Class manifest header in its source code.

下面,我们来打开一个 Spring Boot jar 包,看看其里面的结构
在这里插入图片描述

① META-INF 目录:通过 MANIFEST.MF 文件提供 jar 包的元数据,声明了 jar 的启动类。
② org 目录:为 Spring Boot 提供的 spring-boot-loader 项目,它是 java -jar 启动 Spring Boot 项目的秘密所在,也是稍后我们将深入了解的部分。
③ BOOT-INF/lib 目录:我们 Spring Boot 项目中引入的依赖的 jar 包们。spring-boot-loader 项目很大的一个作用,就是解决 jar 包里嵌套 jar 的情况,如何加载到其中的类。
④ BOOT-INF/classes 目录:我们在 Spring Boot 项目中 Java 类所编译的 .class、配置文件等等。

MANIFEST.MF

我们来查看 META-INF/MANIFEST.MF 文件,里面的内容如下:

Manifest-Version: 1.0
Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx
Implementation-Title: ahs-account
Implementation-Version: 0.0.1-SNAPSHOT
Start-Class: com.ahs.ahsaccount.AhsAccountApplication
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Build-Jdk-Spec: 1.8
Spring-Boot-Version: 2.3.2.RELEASE
Created-By: Maven Jar Plugin 3.2.0
Main-Class: org.springframework.boot.loader.JarLauncher

解释

Main-Class 配置项:Java 规定的 jar 包的启动类,这里设置为 spring-boot-loader 项目的 JarLauncher 类,进行 Spring Boot 应用的启动。
Start-Class 配置项:Spring Boot 规定的主启动类,这里设置为我们定义的 Application 类。

为什么会有Main-Class和Start-Class

Java 规定可执行器的 jar 包禁止嵌套其它 jar 包。但是我们可以看到 BOOT-INF/lib 目录下,实际有 Spring Boot 应用依赖的所有 jar 包。因此,spring-boot-loader 项目自定义实现了 ClassLoader 实现类 LaunchedURLClassLoader,支持加载 BOOT-INF/classes 目录下的 .class 文件,以及 BOOT-INF/lib 目录下的 jar 包。

其实就是
java -jar会去找jar中的manifest文件,在那里面找到真正的启动类;

总结

springboot通过mvn打包插件打包后,执行java -jar命令后会执行MANIFEST.MF文件的mainclass并加载lib目录下嵌套的jar包和calss目录下的文件,最后找打springboot项目的真正启动类,也就是startcalss对应的启动类


http://www.ppmy.cn/news/246358.html

相关文章

通达信l1l2行情接口是什么?

通达信l1l2行情接口是什么?L1L2是指L1L2范数,范数理解为”空间两点之间的距离“这个概念被扩展了。 权重w可以理解为高维向量,也可以理解为高维空间中的一个点。如果从这个点到原点的距离是欧洲距离,那就是L2范数,如图…

如何调用通达信l2行情接口?

如何调用通达信l2行情接口?今天小编,就用这三个场景说明一下,如下: 1、API平台生成公钥,发布公钥并提供给需要连接API的人员。 2、Tradex涵盖市场接收、访问、管理和定制,实现一揽子解决方式。 3、量化接…

东方财富、同花顺、大智慧、通达信的Level2行情接口哪个好?

其实Level2行情接口最主要的核心是逐笔委托和逐笔成交的买卖单数据,盘口数据转瞬即逝,如何能方便的在程序中调用到最全面的即时数据才是应该关心的内容。至于看盘,再好的眼神再快的人脑也比不过使用软件程序写出自己的交易方法让电脑的精准和…

运行通达信行情接口软件的电脑需要什么配置?

运行通达信行情接口软件电脑需要什么配置?目前除了机构之外,大部分的散户用的都是一些比较有名的电脑版股票软件,比如:通达信、同花顺、大智慧、东方财富等。通达信行情接口软件因为使用C语言编写,执行效率高&#xff…

通达信L2行情接口怎样破解?

有些投资者或工作室想使用通达信L2行情接口,但又不想另外去购买,那怎么办呢?最有效的方法就是破解它,那具体要怎么做呢? 要破解通达信L2行情接口,最简单的方法就是通过编程获取数据,然后自己编写…

通达信l1l2行情接口具体有什么区别?

通达信Level-2行情接口是相对于Level-1行情的,早些年,市场上只有Level-1行情,大家都是用Level-1行情做交易。 但是后来,随着经济的发展,以及国外经济金融市场的一些先进经验向本土市场的传播,大陆就开始向…

API通达信接口如何获取股票实时行情?

API通达信接口获取股票实时行情,接口是ApplicationProgrammingInterface的简称,是一些预先定义的函数,包括通达信接口获取股票实时行情,接口地址、传入参数和返回参数。例如: 请求1 回应1 V_sh600660’1~福耀玻璃~ 600660 ~ 25.07 ~ 24.63 ~ 24.54 ~ …

调用通达信l2行情接口简介说明

调用通达信l2行情接口简介说明。 概述 使用纯Python类似TradeX通达信市场接口的实现 因为之前TradeX采用接口Python调用扩展的方式C代码实现,性能有很多限制,比如只支持32位Python,不支持MacOS,Linux等等,但是我自己用的电脑是Ma…