1220 字
约 4 分钟
1
War 包部署入门

War 包部署入门

1. 一句话简介

WAR(Web Application Archive)是把 Java Web 应用连同资源打包成 .war 后缀的标准归档格式,部署到外部 Servlet 容器(如 Tomcat)中运行。Spring Boot 默认打成内嵌 Tomcat 的可执行 JAR,但通过三处改动可改为 WAR 打包:将 <packaging> 改为 war、把 spring-boot-starter-tomcatscope 设为 provided(由外部 Tomcat 提供、不打入包内)、启动类继承 SpringBootServletInitializer 并覆写 configure 方法。核心解决的是「把 Spring Boot 应用装进传统 Java Web 容器运维体系」这一兼容性需求。

2. 什么时候使用

  • ✅ 适用场景
    • 公司/团队运维标准要求统一使用 Tomcat 集群管理应用,不允许自启动进程,需要接入已有监控与发布流程。
    • 需要在同一个 Tomcat 实例的同一进程内部署多个应用,共享容器资源、节省端口与内存开销。
    • 需要依赖 Tomcat 管理控制台(Tomcat Manager)来管理、监控、热卸载应用。
    • 已有存量 Servlet/Spring MVC 应用运行在外部容器中,新模块需与之同容器共存、保持一致部署方式。
    • 自主可控地选择 Servlet 容器版本(如切换为 Jetty、Undertow)并对容器做深度调优。
  • ❌ 不适用/需谨慎
    • 微服务、容器化(Docker/K8s)、云原生场景:可执行 JAR 单文件、无状态、易水平扩展,WAR 反而不便。
    • 追求零运维、快速启动(java -jar 秒级起)的场景:WAR 需先安装配置外部 Tomcat,部署链路更长。
    • 需要进程级隔离/弹性伸缩的应用:WAR 多应用共享同一容器与类加载,故障可能互相影响。
    • 需要应用内自由指定端口与上下文路径的场景:部署到外部 Tomcat 后端口由 server.xml 决定,上下文路径由 WAR 文件名决定,application.yml 中的相关配置会被忽略。

3. 常见业务场景

  • 统一 Tomcat 集群管理:企业既有大量传统 Java Web 应用由专门 Tomcat 集群承载,新增服务被打成 demo-war.war 放入 webapps 目录,接入同一套发布、监控、备份体系,避免引入第二套进程管理方式。
  • 单容器多应用共置:在一台 Tomcat 中同时部署多个轻量应用,共享 JVM 与连接线程池,适合资源受限、规模不大的内部管理系统。
  • WAR + JAR 双模式开发:本模块启动类同时保留 main 方法与 configure 方法(继承 SpringBootServletInitializer),开发期用 mvn spring-boot:run 以内嵌 Tomcat 快速调试(端口 8080、上下文 /demo),生产期打成 WAR 部署,一套代码两用。
  • 兼容存量 Servlet 架构:需与老 web.xml 架构的系统共存或平滑迁移时,WAR 形式保持相同容器治理模型,过渡成本最低。
  • 核心改动演示验证:通过 mvn package 生成 target/demo-war.war,用 jar tf 可检查包内 WEB-INF/classesWEB-INF/lib 存在而 tomcat-embed-*.jar 缺失(因 scope=provided),直观验证 WAR 打包机制是否生效。

4. 同类技术对比

对比维度 可执行 JAR(Spring Boot 默认) WAR 包(外部 Tomcat 部署) 容器化 Docker/K8s
运行方式 java -jar app.jar,内嵌 Tomcat 放入 Tomcat webapps 由容器启动 构建镜像,由编排平台调度
部署复杂性 低,单文件即可运行 中,需安装配置外部容器 较高,需镜像仓库与集群
多应用共享 不共享,每应用独立进程 同一 Tomcat 可部署多个应用 不共享,Pod 间隔离
端口把持 应用内配置 由容器 server.xml 决定 由网络编排(Service/Ingress)决定
扩展性 一般,需自行管进程 弱于 JAR,受单容器容量限制 强,弹性伸缩、无状态
进程隔离性 各应用相互独立 弱,共享容器类加载与 JVM 强,Pod 级隔离
环境依赖 仅 JVM JVM + 外部 Servlet 容器 容器运行时 + 编排平台
学习成本 低~中

选型建议:追求快速启动、微服务化、云原生部署时可执行 JAR,演进到容器化(Docker/K8s)时结合镜像在集群中运行;当必须融入传统 Tomcat 运维体系、需要同容器多应用共置或接入 Tomcat Manager 时选 WAR 包;容器化规模伸缩是 WAR 与 JAR 都无法替代的,只有上编排平台才能获得真正的弹性与隔离。

War 包部署入门
http://clxhxhhr.top/posts/510/
作者
clxstart
发布于
2026-09-07
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。