专业的JAVA编程教程与资源

网站首页 > java教程 正文

JAVA面试|为什么Spring Boot的jar可以直接运行?

temp10 2025-07-03 00:25:07 java教程 5 ℃ 0 评论

用大白话解释Spring Boot的jar为什么可以直接运行,其实就三点核心原理:


JAVA面试|为什么Spring Boot的jar可以直接运行?

一、核心原理

1. 内嵌了一个“迷你服务器”

Spring Boot的jar包里,自带了一个简化版的Tomcat(或其他服务器,如Jetty)。

传统方式:你的代码打包成war文件 → 扔到外部的Tomcat里运行。

Spring Boot:直接把Tomcat和你代码、依赖库一起打包成jar → 不需要外部服务器,自己就是一个“独立应用”。


2. 打包方式特殊:Fat Jar(胖罐子)

普通jar包只包含你的代码和资源文件,但Spring Boot的jar 是“胖罐子”:

包含所有依赖:比如Spring、Tomcat、数据库驱动等第三方库,全部塞进jar里。

启动入口特殊:通过META-INF/MANIFEST.MF文件中的 Main-Class,指向Spring Boot的Launcher类,而不是你的主类。

Main-Class: org.springframework.boot.loader.JarLauncher


3. 启动流程简化:Launcher代理

当你运行java -jar app.jar时:

JVM先执行JarLauncher:Spring Boot的Launcher会做两件事:加载内嵌的Tomcat:启动一个轻量级的Web服务器;加载你的代码:找到@SpringBootApplication注解的主类,初始化Spring容器。

你的应用启动:就像传统 Spring MVC项目在外部Tomcat 里运行一样,但这次是“内置”的。


二、对比传统方式

传统项目

Spring Boot项目

打包成war文件

打包成jar文件(自带服务器)

需要安装Tomcat,部署到 webapps目录

直接java -jar运行,无需安装任何服务器

启动命令:startup.sh

启动命令:java -jar app.jar



三、技术细节补充

如何打包?

使用spring-boot-maven-plugin插件,它会自动把依赖和内嵌服务器打进jar。

<build>

<plugins>

<plugin>

<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId>

</plugin>

</plugins>

</build>

为什么普通jar不能直接运行?

普通jar没有内嵌服务器,也没有Launcher引导启动流程,依赖库也不在jar里。


四、总结

Spring Boot的jar能直接运行,是因为它把服务器、依赖、代码全打包成一个“独立安装包”,像手机上的APP一样,点开就能用,不用再装其他环境。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表