首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    当我们的执行 java -jar xxx.jar 的时候底层到底做了什么?

    每天早上七点三十,准时推送干货 大家都知道我们常用的 SpringBoot 项目最终在线上运行的时候都是通过启动 java -jar xxx.jar 命令来运行的。...认识 jar 在介绍 java -jar 运行原理之前我们先看一下 jar 包里面都包含了哪些内容,我们准备一个 SpringBoot 项目,通过在 https://start.spring.io/ 上我们可以快速创建一个...下载后的项目我们在 pom 依赖里面可以看到有如下依赖,这个插件是我们构建可执行 jar 的前提,所以如果想要打包成一个 jar 那必须在 pom 有增加这个插件,从 start.spring.io 上创建的项目默认是会带上这个插件的...由此我们先大胆的猜测一下,当我们在执行 java -jar 的时候,由于我们的 jar 里面存在 MANIFEST.MF 文件,并且其中包含了 Main-Class 属性且配置了 org.springframework.boot.loader.JarLauncher...因为 JarLauncher 类是在 spring-boot-loader 模块,所以我们在 pom 文件中增加如下依赖,就可以下载源码进行跟踪了。

    76310

    Spring Boot 核心编程思想-第一部分-读书笔记「建议收藏」

    Spring boot 的FAT Jar是一个独立的归档文件,除了包含传统的 Java Jar资源外,还有依赖的JAR文件, 被java -jar 引导时,内部依赖的JAR 文件无法被JDK内建的jar...也就是JarLauncher 和 WarLauncher 本质上 无差别,建议 Spring boot应用使用非传统Web部署时,尽可能使用JAR归档的方式。...,在启动的时候在解压到webapps目录下面;Spring Boot 2.0 的实现,利用嵌入式Tomcat API构建 为 TomcatWebServer Bean,由Sping应用上下文将其引导,...总结:传统的Servlet容器是将压缩的WAR文件解压到对应的目录,然后在加载该目录的资源。 Spring Boot 可执行的 WAR文件在不解压当前文件的前提下依然可以读取其中的资源。...在使用Springboot的时候,当我们将 “starter”添加到应用Class path 时,其关联的特性随应用启动而自动装载,这是Spring boot的亮点, 它的原理是什么呢?

    93410

    如何异地加载 Spring Boot 配置文件?

    ) { // 加载配置文件,然后再运行↓将Spring Boot跑起来 runApplication(*args) } 实现 思路有了之后就简单了,一波操作...在Idea里运行没问题,跑起来了,但是,当打包成jar包之后就行不通了,会爆异常 Caused by: java.nio.file.FileSystemNotFoundException...,实际上也不会很麻烦,解压在CI构建阶段完成即可。不过要完成项目的启动,必须先找到Spring Boot的启动类。...打开jar包,查看里面的META-INF/MENIFEST.MF文件,可以看到Main-Class是org.springframework.boot.loader.JarLauncher ?...那么我们的启动命令将改成这样就大功告成 java -cp /解压出来的文件夹根目录 org.springframework.boot.loader.JarLauncher redis 127.0.0.1

    79120

    你的springboot starter是如何生效的?

    当Spring Boot应用程序启动时,Spring框架会扫描所有的spring.factories文件,然后根据其中配置的自动配置类,自动应用相应的配置。...1.可运行jar的目录结构 SrpingBoot运行的时候是直接运行的一个jar文件,那么java -jar做了什么事情呢,我们先从项目目录结构分析一下。...通过unzip命令解压jar文件,基本可以得到大致如下的目录结构: spring-boot-demo ├── META-INF │ └── MANIFEST.MF ├── BOOT-INF...用以加载SpringBoot中的jar,在MANIFEST.MF中的Main-Class中有指定JarLauncher: Manifest-Version: 1.0 Spring-Boot-Classpath-Index...,在执行java -jar时就会调用JarLauncher中执行main方法,所有应用程序类文件均可通过/BOOT-INF/classes加载,所有依赖的第三方jar均可通过/BOOT-INF/lib加载

    59610

    Spring Boot -- 如何获取已加载的JAR文件流

    ,返回值是一个具体的文件路径,原因也很简单,因为Tomcat在启动一个webapp时会将对应的war解压,然后针对解压后的路径使用一个单独的类加载器进行加载。..." } 打包成fat jar fat jar是Spring Boot引入的一种新格式,其打包后的结构与war包比较类似,但是可以直接执行并不需要先解压再加载,打包后类似目录如下: BOOT-INF/classes...Spring Boot启动原理 打开Spring Boot最终产出的jar包,其MANIFEST.MF文件表明项目的启动入口为org.springframework.boot.loader.JarLauncher...,该类在spring-boot-loader模块下,运行时由Spring Boot所提供,因此可以通过maven引入provided类型的依赖从而查看到源码。...文章标题: Spring Boot -- 如何获取已加载的JAR文件流 文章链接: https://mrdear.cn/2019/03/19/framework/spring/在jar中获取jar文件流

    5.6K10

    Spring boot 项目打出来的包启动过程

    spring boot 的工程支持打包为jar和war,打包成 jar 或 war 可以直接用 java -jar xxx.jar 来启动,war包也可以放入tomcat等容器中运行。...在spring boot项目中,spring boot 提供 为 maven 和 gradle 分别提供了插件增加 repackage 的goal,用于打出 executable 的 fat jar,这个...jar包除了包含了我们的项目编译后的代码和所需的依赖包以外,还有spring-boot-loader 的一些类用于提供类加载器和启动我们自己的main方法,内嵌的依赖jar不需要解压缩和将所有的类都读入内存...Jar Plugin 3.2.0 Main-Class: org.springframework.boot.loader.JarLauncher Main-Class 是 spring 的org.springframework.boot.loader.JarLauncher...:这个文件记录了我们的依赖包的路径,但是这个配置,只有在以展开后的运行方式中才会使用。

    1.7K30

    使用Spring Boot创建docker image

    简介 在很久很久以前,我们是怎么创建Spring Boot的docker image呢?...最最通用的办法就是将Spring boot的应用程序打包成一个fat jar,然后写一个docker file,将这个fat jar制作成为一个docker image然后运行。...第三部分是Spring Boot的类加载器,fat jar包的启动是通过Spring Boot的jarLauncher来创建LaunchedURLClassLoader,通过它来加载lib下面的jar包...第一个问题:我们是用的far jar,在使用far jar的过程中会有一定的性能问题,肯定要比解压过后的性能要低,尤其是在容器环境中运行的情况下,可能会更加突出。...在Maven和Gradle中,Spring Boot引入了新的phase:spring-boot:build-image 我们可以直接运行: mvn spring-boot:build-image

    1.5K21

    可运行jar包的几种打包部署方式

    :my-lib.jar yjmyzz.runnable.jar.DemoApp 程序就能跑起来了 方法二:借助manifest文件 想办法在my-jar.jar中添加MANIFEST.MF文件,内容参考下面这样...,如果是maven项目,请参考  maven: 打包可运行的jar包(java application)及依赖项处理 一文 方法三:借助spring-boot 插件 前面二种方法,主程序的jar包,与依赖的...jar包是分开的,这在云环境中,上传部署比较麻烦,得传多个文件(或者上传前,先压缩成一个包,再传到服务器上解压),服务器节点多时,操作起来太累。...文件),其原理在于spring-boot插件把所有依赖的jar包,全都打到一个jar包里了。...,此外还增加了Start-Class指向我们真正的程序入口yjmyzz.runnable.jar.DemoApp,换句话说,程序运行时,先调用org.springframework.boot.loader.JarLauncher

    2.3K20

    SpringBoot 核心模块原理剖析

    -jar archive.jar 运行包含嵌套依赖 jar 的 jar 或者 war 文件。...spring-boot-autoconfigure 模块 Spring的出现给我们管理 Bean 的依赖注入提供了便捷,但是当我们需要使用通过 pom 引入的 jar 里面的一个 Bean 时候,还是需要手动在...spring-boot-loader 模块则允许我们使用 java -jar archive.jar 方式运行包含嵌套依赖 jar 的 jar 或者 war 文件,它提供了三种类启动器(JarLauncher...首先在打包时候会使用 spring-boot-maven-plugin 插件重写打成的 jar 文件,会设置META-INF/MANIFEST.MF 中的 Main-Class:org.springframework.boot.loader.JarLauncher...接着,运行 java -jar archive.jar ,Launcher 会加载 JarLauncher 类并执行其中的 main 函数,JarLauncher 主要关心构造一个合适的 URLClassLoader

    1.5K90
    领券