美文网首页
springboot启动(1) -- jar启动逻辑

springboot启动(1) -- jar启动逻辑

作者: matthewfly | 来源:发表于2021-02-26 09:53 被阅读0次

    早在springboot之前,就存在jar方式启动web应用的途径。

    • tomcat maven插件方式
      tomcat maven插件是将应用程序与tomcat打包为一个jar,对应的jar配置文件MANIFEST.MF中的main class是tomcat,tomcat启动后通过servlet3支持的spi技术完成应用的装载。

    springboot jar启动又是怎么实现的呢?

    解压一个打包好的springboot jar包目录如下:

    ├── BOOT-INF
    │   ├── classes
    │   ├── lib
    ├── META-INF
    │   ├── MANIFEST.MF
    │   ├── maven
    └── org
        └── springframework
            └── boot
                └── loader
    

    BOOT-INF: 应用程序类合依赖的lib包
    META-INF: jar配置文件
    org:spring启动类JarLaucher所在包

    查看 MANIFEST.MF:

    Manifest-Version: 1.0
    Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx
    Implementation-Title: learn
    Implementation-Version: 0.0.1-SNAPSHOT
    Spring-Boot-Layers-Index: BOOT-INF/layers.idx
    Start-Class: com.mx.learn.LearnApplication
    Spring-Boot-Classes: BOOT-INF/classes/
    Spring-Boot-Lib: BOOT-INF/lib/
    Build-Jdk-Spec: 1.8
    Spring-Boot-Version: 2.4.1
    Created-By: Maven Jar Plugin 3.2.0
    Main-Class: org.springframework.boot.loader.JarLauncher
    

    该文件有别于传统的jar配置信息,前面多了很多spring的配置项。其中启动类为:org.springframework.boot.loader.JarLauncher
    其实,springboot为了支持jar启动,在jar外层又包装了一个启动类JarLauncher,用来支持嵌套jar包的读取。JarLauncher将springboot打包内容按照官方结构组装好后再启动应用主类。
    参考:https://blog.csdn.net/kaihuishang666/article/details/108405691

    另外,org包下也有个WarLauncher类,这是说明springboot也兼容传统war打包方式。

    相关文章

      网友评论

          本文标题:springboot启动(1) -- jar启动逻辑

          本文链接:https://www.haomeiwen.com/subject/kifmfltx.html