我们在快速初始化Spring boot的时候,可以选择他的最终打包成什么
快速初始化Spring boot的时候我们该怎么选择打包方式呢?
在Springboot 初始化的时候,打包方式只有jar包和war包可选
打JAR包
我们处于学习阶段的时候,
要打成jar包的原因是jar包的部署和运行方式是
我们通过spring boot的插件把项目文件和依赖打包成一个可以通过JVM独立运行的jar文件
这个就是jar包,他内嵌了Servlet容器(如Tomcat、Jetty等),可以直接通过启动Jar包来运行Spring Boot应用。
使用的时候直接使用java -jar命令运行Jar包即可,不需要额外的Web容器支持。
这种方式简单快捷,适合单机部署。
打WAR包
打成war包的部署和运行方式是
将项目及其依赖打包成一个War文件
将War包部署到外部的Servlet容器(如Tomcat、Jetty等)中运行
所以在打成War包的时候要排除内置Servlet容器和外部Servlet容器冲突
War包依赖外部Servlet容器的支持,通过启动容器来运行Spring Boot应用。
War包适合于与其他 JavaEE 应用共同运行的场景。
为什么War包适合于与其他 JavaEE 应用共同运行的场景,而jar包不适合呢?
war包适合的原因
主要是因为 WAR 包是专门用于打包 Web 应用程序的。在 JavaEE(Java Enterprise Edition)环境中,通常会有多个 Web 应用程序同时部署在同一个应用服务器上,它们共享服务器的资源,通过服务器来管理和处理客户端请求。
-
独立性:
- WAR 包是一个独立的 Web 应用程序包,其中包含了应用程序的所有必需文件,包括 Servlet、JSP 文件、HTML、CSS、JavaScript、配置文件等。
- 不同的 WAR 包之间可以相互独立,彼此不会产生影响。
-
部署管理:
- JavaEE 应用服务器能够管理和控制多个 WAR 包的部署和运行。
- 通过 JavaEE 应用服务器的管理界面或命令行工具,可以方便地对 WAR 包进行部署、启动、停止和卸载等操作。
-
资源共享:
- WAR 包可以通过 JavaEE 应用服务器共享服务器资源,如数据库连接池、JNDI(Java Naming and Directory Interface)资源、共享库文件等。
- 这样可以避免每个 Web 应用程序都去独立配置和管理这些资源,提高了资源的利用率和管理效率。
-
隔离性:
- 虽然 WAR 包可以与其他 JavaEE 应用共同运行,但它们之间是相互隔离的,不会相互干扰。
- 每个 WAR 包都有自己的上下文路径和类加载器,可以确保各应用程序之间的资源和类文件不会冲突。
所以War合适这个场景的原因是war包在应用服务器上能独立管理、共享资源,并保持相互隔离,从而有效地提高了 Web 应用程序的部署和管理效率。
jar包不适合的原因
-
缺乏标准化的部署结构:
- JAR 包通常用于打包独立的 Java 应用程序,而不是 Web 应用程序。
- 缺乏标准化的部署结构意味着在多个 JavaEE 应用共同运行的环境中,可能会缺少一些必需的配置文件或目录结构,从而导致应用程序无法正常工作。
-
缺乏与 JavaEE 规范相关的功能:
- JavaEE 应用服务器提供了许多与 JavaEE 规范相关的功能,如 Servlet 容器、JSP 引擎、EJB(Enterprise JavaBeans)容器等。
- JAR 包通常不包含这些功能,因此无法直接在 JavaEE 应用服务器中运行。
-
缺乏管理和监控功能:
- JavaEE 应用服务器提供了管理和监控功能,可以方便地管理多个部署的应用程序,如部署、启动、停止、监控等。
- JAR 包通常缺乏这些功能,需要额外的工具或手动操作来管理和监控应用程序。
-
缺乏与 JavaEE 规范相关的集成和扩展点:
- JavaEE 应用服务器提供了许多与 JavaEE 规范相关的集成和扩展点,如 JNDI、JTA(Java Transaction API)、JMS(Java Message Service)等。
- JAR 包通常不包含这些集成和扩展点,因此无法直接利用 JavaEE 应用服务器提供的功能。
虽然 JAR 包是一个独立的 Java 应用程序包,但由于缺乏与 JavaEE 规范相关的功能、标准化的部署结构、管理和监控功能以及集成和扩展点,所以不太适合共同运行的场景
而War就是为打包web应用设计出来的,这种方式可以结合容器的优势,实现多实例部署和负载均衡。