spring-boot 可执行jar中
META-INF/MANIFEST.MF
Manifest-Version: 1.0 Created-By: Maven Archiver 3.4.0 Build-Jdk-Spec: 11 Implementation-Title: spring-boot Implementation-Version: 0.0.1-SNAPSHOT Main-Class: org.springframework.boot.loader.JarLauncher Start-Class: com.cdd.springboot.Application Spring-Boot-Version: 2.2.0.RELEASE Spring-Boot-Classes: BOOT-INF/classes/ Spring-Boot-Lib: BOOT-INF/lib/
根据java官方文档和java文档规范我们知道jar包启动必须在META-INF/MANIFEST.MF(启动类)定义Main-class和Start-Class(引导类)
image.pngspring-boot项目编译成jar包的目录结构如下
1、BOOT-INF存放项目的class和依赖
2、META-INF存放maven打包配置和MANIFEST.MF
3、最后一个文件夹存放解析jar包的launcher
image.png根据META-INF/MANIFEST.MF里面的配置内容可以发现 当使用jar方式部署时spring-boot 用org.springframework.boot.loader.JarLauncher这个类启动整个项目,当然也可以很容易的发现用war包部署时用org.springframework.boot.loader.WarLauncher启动
image.pngjar包启动首先会调用Main-Class的main方法,跟踪代码会发现最终会同步调用Start-Class的main方法,所以看到这里我们可以得出结论 用jar包启动时项目的启动类和JarLauncher属于同一进程。
网友评论