一、jar 与 war 包的区别
参考来源:spring boot打jar包和打war包的区别作用 - 赖进杰的专栏 - CSDN博客
-
jar 包:直接通过内置 tomcat 运行,不需要额外安装 tomcat。如需修改内置 tomcat 的配置,只需要在SpringBoot 的配置文件中配置。内置 tomcat 没有自己的日志输出,全靠 jar 包应用输出日志。但是比较方便,快速,比较简单。
-
war 包:传统的应用交付方式,需要安装 tomcat,然后放到 webapps 目录下运行 war 包,可以灵活选择tomcat 版本,可以直接修改 tomcat 的配置,有自己的 tomcat 日志输出,可以灵活配置安全策略。相对打成 jar 包来说没那么快速方便。
二、把 SpringBoot 打成 war 包部署到 Tomcat 中
参考来源:三分钟把spring boot打成war包部署到tomcat中 - 掘金
1. 将 SpringBoot 项目打包成 war
修改pom.xml指定打包方式为 war 包: <packaging>war</packaging>
修改 pom.xml 修改 SpringBoot 内置的 tomcat 依赖,指定 scope 为 provided
1 | <dependency> |
修改成果如下:
创建一个初始化文件初始化项目比如:MySpringBootServletInitializer.java 核心代码如下
1 | public class MySpringBootServletInitializer extends SpringBootServletInitializer { |
执行命令 mvn clean install -Dmaven.test.skip=true
将项目打成war包,执行后到target目录可以看到成功的把项目打成了war包
-
一些注意的点
- 可以修改最终的war包的名称,比如去掉文件名里的版本号:mywar.war,在pom.xml使用finalName指令可以实现
上述配置如果觉得麻烦,可以直接下载这位作者的代码包,直接下载打包体验(GitHub:neatlife/mywar)
2. 把项目的 war 放到 Tomcat 里运行
这里我们以 CentOS 7 为例,进行 Tomcat 配置和部署
- 下载 Tomcat9,并解压
1 | wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.22/bin/apache-tomcat-9.0.22.tar.gz |
-
将项目打成 WAR 包放在 Tomcat 的 webapps 目录下
-
在
/conf
目录下找到server.xml
的文件 -
在Host标签里边添加
<Context path="" docBase="myproject" reloadable="true" />
1 | <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> |
Context
标签内容,注意 path
填空,docBase
为项目名称
-
启动 Tomcat,
sh bin/startup.sh
-
再次访问即可携带项目名称或不带都可以访问到项目。如 localhost:8080/ 或 localhost:8080/myproject